C++ 在链接静态库时,避免链接未使用的符号
我正在使用编译一个动态库,我将重新发布它。出于各种原因,我使用了一些库,比如说C++ 在链接静态库时,避免链接未使用的符号,c++,linker,darwin,C++,Linker,Darwin,我正在使用编译一个动态库,我将重新发布它。出于各种原因,我使用了一些库,比如说libz,以保持简单 由于该库通常在Mac系统上找不到,因此我希望通过将路径传递到.a-file来将符号用于动态库,以简化部署 现在,链接器将库中的所有符号链接到生成的动态库中,尽管我只引用了一个子集。在linux上,我从未遇到过这个问题,链接器愉快地丢弃了所有未引用的符号,并创建了一个非常瘦的可执行文件,所以这应该是可能的。我现在拥有的动态库文件比它应该的大约10倍 我尝试过摆弄-dead_代码链接器标志,但没有用。
libz
,以保持简单
由于该库通常在Mac系统上找不到,因此我希望通过将路径传递到.a-file
来将符号用于动态库,以简化部署
现在,链接器将库中的所有符号链接到生成的动态库中,尽管我只引用了一个子集。在linux上,我从未遇到过这个问题,链接器愉快地丢弃了所有未引用的符号,并创建了一个非常瘦的可执行文件,所以这应该是可能的。我现在拥有的动态库文件比它应该的大约10倍
我尝试过摆弄-dead_代码链接器标志,但没有用。也许我就是不明白
有人知道这个问题的解决方法吗?
关于(你可能指的是-dead\u code
):
在打开-dead_strip之前
选项您的项目将首先必须
被“移植”以使用死代码
剥离。这将包括改变
from-gused(默认为-g)到
-gfull并重新编译链接到您的
使用来自的新编译器进行编程
MacOSX 2004年6月发布。如果
构建一个可执行文件来加载
插件,它使用来自
可执行文件,您必须确保
插件使用的符号不是
(通过使用)剥离
属性((已使用))或-exported\u symbols\u list选项)。如果您使用的是导出列表和建筑
共享库或可执行文件
将与ld(1)一起使用的
-bundle_loader标志,您需要包含异常的符号
导出列表中的帧信息
用于导出的C++符号。这些
符号以.eh结尾,可见
使用nm(1)工具
:
要从中启用死代码剥离,请执行以下操作:
命令行,传递-dead_strip
选择ld。你也应该通过考试
-gfull选项到GCC,以生成一组完整的调试符号
你的密码。链接器使用这个额外的
调试信息到死区
可执行文件
希望这有帮助
此答案中的所有内容都位于“apple ld静态链接未使用符号”的前几个谷歌搜索结果中:) 谢谢你用谷歌搜索这个。在mac-yeilds“Mach-O”对象上编译,与ELF相反,我认为ELF与
--gc部分
开关一起使用。我尝试了-gfull
开关和-dead\u strip
但没有成功。