GCC:如何找到不丢弃目标文件的原因

sho*_*osh 8 c c++ linker gcc ld

我有一个可执行文件链接到一个包含大量功能的大型.a存档.可执行文件只使用此存档中的一小部分函数,​​但由于某种原因,它从中提取所有内容并最终变得非常大.
我怀疑可执行文件正在使用的某些功能以某种方式引用它不应该引用的东西,并导致其他所有内容被拉出.
是否有可能让gcc告诉我什么引用导致在可执行文件中添加特定符号?为什么会发生这种情况?

我尝试过使用--gc-sections没有效果.
我已经尝试使用--version-script可执行本地的所有符号而没有效果
我不感兴趣-ffunction-sections,-fdata-sections因为它是我想丢弃的目标文件,而不是函数.
其他答案提到-why_live但似乎只为darwin实现,我在linux x86_64

R..*_*R.. 4

用于-Wl,-M传递-M给链接器,使其打印链接跟踪。这将向您显示从存档链接的每个目标文件的原因(或至少是第一个找到的原因)。