描述
我有一個 c++ 的動态庫 libfoo.dylib 以及其頭檔案 foo.h 。
我想建立一個 Framework,導入這個動态庫,并想用 Swift 調用或進一步封裝動态庫中的方法,然後暴露封裝好的
Swift 方法。
foo.h 檔案中有類似如下内容:
#include
namespace someNamespace {
struct someStruct;
void someFunction();
enum someEnum { ... };
typedef int someTypedef;
class someClass { ... };
}
我的嘗試
我在 Linked Frameworks and Libraries 中添加了 libfoo.dylib,
并添加 module.map
module MyModule {
header "foo.h"
export *
}
試圖轉換成在 Swift 檔案中能導入的模組,但報錯。
import MyModule // Could not build Objective-C module 'MyModule'
public class MyFramework {
public init() {}
}
同時 foo.h 出現如下錯誤:
#include // 'string' file not found
嘗試添加轉換用的 warpper.h:
#ifdef __cplusplus
extern "C" {
#endif
#import "foo.h"
#ifdef __cplusplus
}
#endif
并修改 module.map 為:
module MyModule {
header "warpper.h"
export *
}
但還是報同樣的錯誤。
問題
我做錯了什麼?
我應該怎麼做才能在我的 Swift 檔案中調用到動态庫中的内容?