我正在使用苹果海湾合作委员会编译一个我要重新分发的 dylib。由于各种原因我正在使用一些库,比方说libz
为了保持简单。
由于这个库通常在 Mac 系统上找不到,我希望静态链接在通过将路径传递给 dylib 使用符号.a-file
以简化部署。
现在,链接器链接到all尽管我只引用了一个子集,但将 lib 中的符号放入生成的 dylib 中。在linux上我从未遇到过这个问题,链接器很高兴地丢弃所有未引用的符号并创建一个非常小的可执行文件,所以它应该是possible。我现在拥有的 dylib 文件比应有的大 10 倍。
我尝试摆弄 -dead_code 链接器标志,但无济于事。也许我只是不明白?
有谁知道这个问题的解决办法吗?
Try -Wl,--gc-sections.
至于-dead_strip(你可能的意思是-dead_code
):
打开-dead_strip之前
您的项目首先必须选择
被“移植”以处理死代码
剥离。这将包括改变
从 -gused (-g 的默认值)到
-gfull 并重新编译链接到您的所有对象文件
使用新编译器进行编程
Mac OS X 2004 年 6 月发布。还如果
您构建了一个加载的可执行文件
插件,它使用来自
可执行文件,你必须确保
插件使用的符号不是
剥离(通过使用属性((使用))或 -exported_symbols_list 选项)。如果您正在使用导出列表并构建
共享库或可执行文件
将与 ld(1) 一起使用
-bundle_loader 标志,您需要包含异常符号
导出列表中的帧信息
用于导出的 C++ 符号。这些
符号以.eh结尾,可以看到
使用 nm(1) 工具。
and:
启用死代码剥离
命令行,传递 -dead_strip
ld 的选项。您还应该通过
GCC 的 -gfull 选项可生成完整的调试符号集
你的代码。链接器使用这个额外的
调试信息到dead strip
可执行文件。
希望这可以帮助。
All content in this answer was located within the first few Google search results for "apple ld static link unused symbols". :)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)