我正在考虑开始在框架中使用 Swift,该框架使用libz.dylib
,但似乎无法从 Swift 中导入它。我试过import zlib
and import libz
,这不起作用。 ZLib 已链接到目标。
这似乎是让我的 Swift 代码看到的唯一方法zlib
Classes 的作用是在桥接标头中导入必要的标头,但是框架目标不能有桥接标头,那么有没有办法使用 dylib?
我已向 Swift 项目添加了一个 C/C++ dylib 库,其中包含 C 公共 API 标头。
假设该库是 libModule.dylib。
-
创建一个包含“模块”的目录
mkdir Module; cd Module
-
在 Module 目录中创建文件 module.map
Touch module.map
-
创建一个目录,这将是头文件目录,任何名称都可以。
mkdir Headers
-
将所有标头复制到 Headers 目录中
cp -R path/Headers Headers/
-
打开 module.map 并将以下内容复制到其中,Swift 团队建议,在库名称前面添加前缀 C,以防它是 C 库。
module CModule {
umbrella "Headers" // for multiple files
header "filename.h" // for single header file, in this case even the Header directory is not needed.
export *
}
转到“构建设置”->“Swift 编译器”-“搜索路径”
- 将完整的模块目录路径添加到“导入路径”键中。
- 转到构建阶段,添加新的副本文件阶段。
- 将 libModule.dylib 拖至 Copy Files 阶段。选择“框架”作为目标。
- 如果需要,将 libModule.dylib 添加到构建阶段的“链接二进制文件与库”部分。
如果错过第 9 步,我们会遇到著名的 @rpath/ Image not found 崩溃。
现在在 swift 中导入模块,如下所示:
import CModule // name given inside module.map
对于系统库,大多数步骤不需要..只需创建具有正确标头路径的目录和模块映射文件并执行 6、7。
似乎第 10 步甚至不需要作为系统库。
module CommonCrypto [system] {
header "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/CommonCrypto/CommonCrypto.h"
export *
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)