我有一个胖静态库,有 2 个架构切片(armv7、arm64)。 我正在尝试让它与 swift 一起工作,并将其包装到 Cocoa Touch Framework 中。
我做什么:
- 创建可可触摸框架项目
- 拖动带有标题的静态库
- 将
OTHER_LDFLAGS
设置为-all_load
- 将
ONLY_ACTIVE_ARCH
设置为NO
- 将
VALID_ARCHS
和ARCHS
设置为armv7
和arm64
- 使用发布生成配置生成
- 从 DerivedData/.. 获取 .framework 文件。/../产品/
当我将此.framework放入我的swift项目中,添加到目标常规设置中的嵌入式二进制文件部分,导入框架并使用其类之一时,我得到了undefined symbols for architecture arm64
或undefined symbols for architecture armv7
。
编辑:
不确定它是否有帮助,但我注意到静态库的大小约为 34MB,但生成的 .framework 的大小约为 12MB。
编辑2:
我在静态库和生成的动态库上运行了nm -arch arm64 -g myLibraryName
。动态库不包含静态库具有的所有符号。似乎XCode构建过程剥离了很多。
我想你也忘了添加:
项目>目标>构建阶段->链接二进制文件与库: 添加 + 的:libz.dylib
或libz.tbd
(从Xcode 7开始,*.dylib
文件是now *.tbd
文件)
请务必同时清理文件夹:/User/yourname/Library/Developer/XCode/DerivedData
PS:如果需要,还应该能够通过添加参数 -lz 来添加构建设置中"其他链接器标志"中的libz.tbd
。