本着 Xcode 9 的“革命性”功能(即编译静态框架)的精神,我们试图将子项目构建为静态框架,以便它们可以静态链接到主应用程序目标。
我们的子项目之一本身具有静态框架依赖项(Firebase)。当我们将子项目构建为动态框架时,一切正常,但是一旦我们将其切换到 mach-o staticlib ,它就会突然丢失 Firebase 库符号。
这是输出nm
分别将我们的子项目构建为动态框架和静态框架:
dynamic:
00000000001c3450 S _OBJC_CLASS_$_FIRApp
static:
U _OBJC_CLASS_$_FIRApp
问题是,在这两种情况下,框架都“成功”构建,但一旦与另一个目标(例如测试目标)链接,就会抱怨缺少符号。当子项目本身是静态框架时,我们如何确保 Firebase 框架中的所有符号都嵌入到子项目中?我们尝试了-all_load
, -ObjC
链接器标志无济于事...
免责声明:仍在寻找最终答案。
在更多地使用静态框架之后,我现在意识到它们不会被链接器自动合并,就像它们合并到可执行/动态目标中一样。
无论如何,我最终将所有静态框架及其子依赖项链接到主要目标。
应该有一种方法可以合并静态框架,而不会使最终框架成为动态库,唉,搜索仍在继续......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)