如何在xcode中禁用C ++死代码剥离

时间:2013-04-30 07:50:34

标签: c++ xcode

我正在尝试链接来自我的C ++ xcode应用程序的几个静态库(我自己的库)的所有未引用的符号。我已经尝试了所有与'strip'相关的属性(通过搜索'strip'的属性),但未引用的符号,特别是类,没有链接。

我也尝试过-r linker标志,但是链接器只会抱怨: 'ld:-r和-dead_strip不能一起使用'

我尝试将'-no_dead_strip'添加到链接器标志中,但是链接器只是告诉我 <-no_dead_strip'被忽略。

我对'Apple LLVM'和'LLVM GCC'都得到了相同的结果。

所以,我的问题是:我应该使用什么链接器标志或目标属性来关闭所有死代码剥离并强制链接未引用的类?

1 个答案:

答案 0 :(得分:6)

标准链接机制 - 即使用-l选项链接.a文件将智能地过滤掉未使用的目标文件,因此这些符号在结果二进制文件中不存在的原因是他们实际上并没有联系在一起。

如果要从一个存档中获取所有符号,可以使用标记:-force_load libraryarchive,使用方式如下:-Wl,-force_load,libfoobar.a其中libfoobar.a是您要获取的所有存档来自的符号。

为了获取所有档案中的所有符号,您应该使用链接器标记:-all_load,或者如果您从gcc / clang开始标记{{} {1}}。

它会产生可怕的符号表!