GCC链接选项,查看为什么某些目标文件被链接到二进制文件中。

8
我有一些链接问题。
为了调查该问题,我添加了-t链接器标志(gcc -Wl,-t)以打印使用了哪些库以及使用了哪些静态库中的对象。
在某些配置中,有一个静态库会使用一组对象文件,在其他配置中则使用另一组。
是否有办法(可能是ld标志)来查看为什么特定对象(先前未定义的符号在对象文件中被定义)被链接到二进制文件中,而来自相同静态库的其他对象则没有?
2个回答

6
我找到的标志是-M,它会将链接映射打印到标准输出中。
来自ld(1)的说明:
  -M
  --print-map
      Print a link map to the standard output.  A link map provides information about the link, including the following:
           ·   Where object files are mapped into memory.
           ·   How common symbols are allocated.
           ·   All archive members included in the link, with a mention of the symbol which caused the archive member to be brought in.
           ·   The values assigned to symbols.

列表中的第二项是我在寻找的内容。


1

由于您在最后一次编辑问题和答案一个月后添加了赏金,我认为您不喜欢自己的答案。

据我所知,您正在尝试找出是什么对象(A)导致其他对象(B)被链接。

如果您在没有B的情况下进行编译/链接(即在命令行上没有B),那么您应该会收到错误消息,告诉您为什么需要它,并引用A。

如果B在库中,则可能需要制作一个不包括B的特殊版本的该库。


其实我喜欢我的答案。我不小心绑定了,现在无法解除绑定 :) - dimba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接