在 Swift Framework 里如何调用 dylib 里的方法?
描述
我有一个 c++ 的动态库 libfoo.dylib
以及其头文件 foo.h
。
我想创建一个 Framework,导入这个动态库,并想用 Swift 调用或进一步封装动态库中的方法,然后暴露封装好的
Swift 方法。
foo.h
文件中有类似如下内容:
#include <someHeader.h>
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> // '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 文件中调用到动态库中的内容?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
可以将 C++ 代码通过 Objective-C++ 进行桥接到 Swift。
新建一个
.m
文件,修改后缀为.mm
,剩下的跟 Objective-C 桥接 Swift 一样。包装的这层只能用c ?