2013-04-30 63 views
5

我想从我的C++ xcode应用程序中的几个静态库(我自己的库)的所有未引用符号中链接。我已经尝试了所有与'strip'相关的属性(通过搜索'strip'属性),但未引用的符号,特别是类没有链接到。如何在xcode中禁用C++死代码剥离

我也尝试了-r链接器标志,但 :然后连接器只与抱怨“LD:-r和-dead_strip不能一起使用”

我已经尝试添加“-no_dead_strip”的连接标志,但随后的连接只是告诉我 “-no_dead_strip”被忽略。

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

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

+0

也许试试'--whole-archive'链接器标志? – 2013-04-30 07:59:33

+0

Android的NDK在其“原生粘合”(静态库)中包含一个名为'app_dummy()'的空函数,该函数没有实现。从客户端调用(与提到的库链接)显然会防止在该编译单元中删除符号。我正在寻找更优雅的方法,但似乎没有。 – pauluss86 2014-01-29 21:52:02

回答

6

标准链接机制 - 即使用-l选项来链接.a文件将智能地过滤掉未使用的目标文件,所以符号在结果二进制文件中不存在的原因是它们实际上并不是如果你想从一个档案得到所有的符号

链接,您可以使用标志:-force_load libraryarchive,使用这样的:-Wl,-force_load,libfoobar.a其中libfoobar.a是你想从所有符号存档。如果你从gcc/clang-Wl,-all_load驾驶它-all_load,或:

为了获得来自所有归档所有的符号,你应该使用链接标志。

虽然它会产生丑陋的符号表!

+1

'死代码剥离'==否和'不死带条件和条款'==是,它没有工作。但是当我添加'-all_load'链接器标志时,一切都很完美。谢谢!! – 2013-04-30 08:52:26