什么是金接头?

pla*_*hat 26 linux memory gcc linker dynamic-linking

有没有人gold以前使用过链接器?为了链接一个相当大的项目,我不得不使用它而不是 GNU ld,后者抛出了一些错误并且无法链接。

gold链接器如何能够链接ld失败的大型项目?某处是否存在某种记忆欺骗?

Ste*_*itt 27

gold链接器被设计为特定于 ELF 的链接器,旨在生成比 BFD ld(“传统”GNU binutils 链接器)更易于维护和更快的链接器。作为一个副作用,它确实能够使用比 BFD 更少的内存来链接非常大的程序ld,这大概是因为需要处理的抽象层更少,并且因为链接器的数据结构更直接地映射到 ELF 格式。

我不确定是否有很多文档专门解决了两个链接器之间的设计差异以及它们对内存使用的影响。各种 GNU 链接器的作者伊恩·兰斯·泰勒 (Ian Lance Taylor) 撰写了一系列关于链接器的非常有趣的文章,其中解释了导致gold. 他的是

我现在正在使用的链接器称为 gold,将是我的第三个。它只是一个 ELF 链接器。再一次,目标是速度,在这种情况下比我的第二个链接器快。多年来,由于增加了对 ELF 和共享库的支持,该链接器的速度明显减慢。这种支持是修补而不是设计的。

(第二个链接器是 BFD ld。)


sus*_*tus 13

编写黄金链接器是为了使链接过程更快。根据黄金作者伊恩·兰斯·泰勒的说法

目前,与现有链接器相比,黄金只有一个显着优势:速度更快。在大型 C++ 程序中,我测得它的运行速度快了五倍。

他正在将黄金链接器的性能与传统的 GNU 链接器进行比较。gold(与 GNU 链接器不同)不使用 BFD 库来处理目标文件。

gold 的局限性在于(与可以处理多种目标文件类型的 GNU 链接器不同)它只能链接 ELF 格式的目标文件。

关于您在使用 GNU 链接器时遇到的问题,以下是Michael Adam对 SO类似问题的有趣回答:

黄金链接器甚至在我们的代码中发现了一些依赖问题,因为它在某些细节上似乎比经典链接器更正确。参见,例如这个 Samba 提交。