gcc 链接选项以查看为啥某些目标文件链接到二进制文件
Posted
技术标签:
【中文标题】gcc 链接选项以查看为啥某些目标文件链接到二进制文件【英文标题】:gcc link option to see why some object file is linked into binarygcc 链接选项以查看为什么某些目标文件链接到二进制文件 【发布时间】:2012-10-15 10:47:35 【问题描述】:我有一些链接问题。
为了调查问题,我添加了 -t 链接器标志 (gcc -Wl,-t) 以打印使用了哪些库以及使用了哪些静态库中的对象。
有一个静态库,在某些配置中使用一组目标文件,而在另一组中使用。
有什么方法(可能是 ld 标志)来查看为什么特定对象(在对象文件中定义了以前未定义的符号)链接到二进制文件中,而其他来自同一个静态库的不是?
【问题讨论】:
【参考方案1】:我正在寻找的标志是 -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>
【讨论】:
【参考方案2】:由于您在上次编辑问题和答案一个多月后添加了赏金,我假设您不喜欢自己的答案。
据我了解,您正试图找出是什么对象 (A) 导致其他对象 (B) 被链接。
如果您在没有 B 存在的情况下进行编译/链接(即在命令行上没有),那么您应该会收到错误消息,告诉您为什么需要它,这将引用 A。
如果 B 在某个库中,您可能需要制作该库的一个不包含 B 的特殊版本。
【讨论】:
其实我喜欢我自己的回答。我确实错误地绑定了,无法取消绑定:)以上是关于gcc 链接选项以查看为啥某些目标文件链接到二进制文件的主要内容,如果未能解决你的问题,请参考以下文章