5

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

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

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

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

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

4

1 回答 1

6

标准链接机制 - 即使用-l链接.a文件的选项将智能地过滤掉未使用的目标文件,因此生成的二进制文件中不存在符号的原因是它们实际上没有链接。

如果您想从一个档案中获取所有符号,您可以使用标志:-force_load libraryarchive,使用如下:您想要从中获取所有符号的档案-Wl,-force_load,libfoobar.a在哪里libfoobar.a

为了从所有档案中获取所有符号,您应该使用链接器标志:-all_load,或者如果您从gcc/clang标志驱动它-Wl,-all_load

但是,它会产生可怕的符号表!

于 2013-04-30T08:13:44.937 回答