【发布时间】:2017-04-11 08:33:08
【问题描述】:
我有一个带有 2 个架构切片(armv7、arm64)的胖静态库。 我正在尝试使它与 swift 一起工作并将其包装到 Cocoa Touch 框架中。
我做什么:
- 创建 Cocoa Touch 框架项目
- 拖一个带头的静态库
- 将
OTHER_LDFLAGS设置为-all_load - 将
ONLY_ACTIVE_ARCH设置为NO - 将
VALID_ARCHS和ARCHS设置为armv7和arm64 - 使用 Release 构建配置构建
- 从 DerivedData/../../Products/ 抓取 .framework 文件
当我将此 .framework 放入我的 swift 项目时,添加到我的目标常规设置中的 Embedded Binaries 部分,导入框架并使用它的类之一,我得到 undefined symbols for architecture arm64 或 undefined symbols for architecture armv7。
编辑:
不确定它是否有帮助,但我注意到静态库的大小约为 34MB,但生成的 .framework 的大小约为 12MB。
编辑 2:
我在静态库和生成的动态库上都运行了nm -arch arm64 -g myLibraryName。动态库不包含静态库具有的所有符号。似乎 XCode 构建过程剥离了很多。
【问题讨论】:
-
澄清你想在你的框架内分发库吗?您只是希望能够在框架内使用库,还是还试图将库公开给嵌入框架的应用程序?终于有
.dylib版本的静态库了吗? -
@tdbit 我正在尝试将静态库包装到 Cocoa Touch 框架,因为我想使用 swift。如您所知,swift 不支持静态库。不,
.dylib不可用。 -
确保您以正确的方式创建库。检查以下链接以了解创建动态框架的正确方法。 > insert.io/frameworkios8xcode6 > possiblemobile.com/2016/08/ios-frameworks-part-2-build-and-ship
-
恐怕还没有足够的信息来找到问题的根源。你有没有将你的库添加到链接库中?在构建设置中选择了哪些目标架构?您是否为模拟器目标或设备构建?哪些符号未定义,因为您的库中可能使用了某些 dylib?
-
嗨,你有办法做到这一点吗?我也面临同样的问题……
标签: ios objective-c swift xcode cocoa-touch