Linker gold和standard(bfd)链接器之间的库选择规则有何不同?

Linker gold和standard(bfd)链接器之间的库选择规则有何不同?,linker,gold-linker,Linker,Gold Linker,我知道标准ld.bfd按照指定的顺序处理静态库,从每个库中提取满足该时间点未满足依赖性的对象。黄金是否遵循相同的流程,是否有记录在案 我看到一个案例,gold比ld.bfd多了一个*.so文件,我正在使用-as-needed选项,并试图找出原因,以及一般来说,我应该注意的其他区别。选择存档库成员的规则在两个链接器之间几乎相同,但与确定是否需要共享库的规则无关 对于具有符号索引(即ranlib已运行)的存档库,链接器依次考虑索引中的每个符号。如果符号满足链接中该点的未解析引用,则链接器将包括定义符

我知道标准ld.bfd按照指定的顺序处理静态库,从每个库中提取满足该时间点未满足依赖性的对象。黄金是否遵循相同的流程,是否有记录在案


我看到一个案例,gold比ld.bfd多了一个*.so文件,我正在使用-as-needed选项,并试图找出原因,以及一般来说,我应该注意的其他区别。

选择存档库成员的规则在两个链接器之间几乎相同,但与确定是否需要共享库的规则无关

对于具有符号索引(即ranlib已运行)的存档库,链接器依次考虑索引中的每个符号。如果符号满足链接中该点的未解析引用,则链接器将包括定义符号的存档成员。它重复传递符号索引,直到没有添加新的存档成员

当涉及到弱符号和普通符号时,规则变得有点复杂,而gold和BFD ld目前在处理普通符号方面略有不同-参见

目前,没有符号索引的存档库通常不受支持。过去,链接器只需对库进行一次遍历,如果满足未解析的引用,则添加一个存档成员。这需要对库进行拓扑排序,许多Unix系统仍然有一个lorder工具来完成这项工作

共享库在一个需要的选项的作用下,我们认为如果它满足一个常规对象文件的非弱引用,则需要该库。黄金标记需要的共享库,即使引用来自按链接顺序跟随它的对象;我认为BFD ld只在引用位于共享库之前时才标记它需要


如果您试图弄清楚链接器认为需要或不需要特定库的确切原因,您可能会发现链接器的-y符号选项很有用。

谢谢。这很有帮助,给了我一些可以继续下去的东西。我希望我们的项目对这些东西不那么敏感,但当在一个大型代码库中混合几十个库时,这就是事实。