我有一些链接问题。
为了解决这个问题,我添加了 -t 链接器标志(gcc -Wl,-t)来打印使用的库和使用静态库的对象。
有一个静态库,在某些配置中使用了一组目标文件,而在另一组配置中使用。
有没有办法(可能是 ld 标志)看到为什么特定对象(在目标文件中定义了以前未定义的符号)被链接到二进制文件而其他来自同一个静态库的不是?
答案 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.
列表中的第二项是我正在寻找的。 p>
答案 1 :(得分:1)
由于您在上次编辑问答后一个多月后添加了赏金,我假设您不喜欢自己的答案。
据我所知,你试图找出哪个对象(A)导致某些其他对象(B)被链接。
如果你在没有B存在的情况下进行编译/链接(即命令行没有),那么你应该收到错误消息,告诉你为什么需要它,这将引用A.
如果B在库中,您可能需要制作不包含B的该库的特殊版本。