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

GCC: how to find why an object file is not discarded

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

我试过 --gc-sections 但没有效果。
我试过使用 --version-script 使可执行文件中的所有符号都无效
我对 -ffunction-sections-fdata-sections 不感兴趣,因为我想丢弃的是目标文件,而不是函数。
其他答案提到 -why_live 但这似乎只适用于达尔文,我在 linux x86_64

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