我正在尝试链接来自几个静态库(我自己的库)的所有未引用的符号,用于我的C++ xcode应用程序.我已经尝试了所有与'strip'相关的属性(通过搜索'strip'的属性),但未引用的符号,特别是类,没有链接.
我也尝试了-r链接器标志,但是链接器只会抱怨:'ld:-r和-dead_strip不能一起使用'
我尝试将'-no_dead_strip'添加到链接器标志,但接着只是告诉我'-no_dead_strip'被忽略.
我对'Apple LLVM'和'LLVM GCC'都得到了相同的结果.
所以,我的问题是:我应该使用什么链接器标志或目标属性来关闭所有死代码剥离并强制链接未引用的类?
我的iOS项目用于dlsym动态指向可选的C库。没有该项目的可选as-in可以随我们一起运行,它只是添加了功能。
有关背景信息:在运行时在Objective-C中检测并使用可选的外部C库
问题是,XCode清除了“未使用”的库。使用dlsym方法没有直接引用我的第三方库,XCode删除了它。
我以为自己在“其他链接器标记”中找到了解决方案,在
-force_load "$(SRCROOT)/my_external.a"模拟器中效果很好。(-all_load效果也不错,但对我来说似乎太过分了)。
问题是当我移至真实设备时,此解决方法失败,并且库未加载(与相同-all_load)。
唯一起作用的是在XCode中禁用名为的功能Dead Code Stripping。
问题是:禁用或建议我的客户禁用此功能真的不好吗?如果是这样,还有更好的选择吗?