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

how to disable C++ dead code stripping in xcode

本文关键字:c++ 代码 剥离 xcode      更新时间:2023-10-16

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

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

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

我用'Apple LLVM'和'LLVM GCC'得到相同的结果。

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

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

如果你想从一个存档中获取所有的符号,你可以使用标志:-force_load libraryarchive,像:-Wl,-force_load,libfoobar.a一样使用,其中libfoobar.a是你想从中获取所有符号的存档。

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

它产生了可怕的符号表!