我有一个可执行文件,该文件链接到包含许多功能的大型.a存档。该可执行文件仅使用此归档文件中的一小部分功能,但由于某种原因,它会从中提取所有内容并最终变得很大。
我怀疑可执行文件正在使用的某些功能以某种方式引用了它不应该引用的内容,从而导致其他所有内容被提取。
是否可以让gcc告诉我什么引用导致在可执行文件中添加特定符号?为什么还会发生这种情况?
我尝试使用--gc-sections
无效。
我尝试使用--version-script
将可执行文件中的所有符号设置为本地,但没有任何效果
我对-ffunction-sections
和-fdata-sections
不感兴趣,因为它是我要丢弃的目标文件,而不是函数。
其他答案提到-why_live
,但似乎只为darwin实现,我在linux x86_64中
最佳答案
使用-Wl,-M
将-M
传递给链接器,使它打印链接跟踪。这将向您显示从存档链接的每个目标文件的原因(或至少是第一个发现的原因)。
关于c++ - GCC:如何查找为什么不丢弃目标文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28010491/