gcc链接选项,以查看为什么某些目标文件链接到二进制文件

时间:2012-10-25 09:21:23

标签: linux gcc compilation linker ld

我有一些链接问题。

为了解决这个问题,我添加了 -t 链接器标志(gcc -Wl,-t)来打印使用的库和使用静态库的对象。

有一个静态库,在某些配置中使用了一组目标文件,而在另一组配置中使用。

有没有办法(可能是 ld 标志)看到为什么特定对象(在目标文件中定义了以前未定义的符号)被链接到二进制文件而其他来自同一个静态库的不是?

2 个答案:

答案 0 :(得分:4)

我正在寻找的标志是 -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 :(得分:1)

由于您在上次编辑问答后一个多月后添加了赏金,我假设您不喜欢自己的答案。

据我所知,你试图找出哪个对象(A)导致某些其他对象(B)被链接。

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

如果B在库中,您可能需要制作不包含B的该库的特殊版本。