用黄金取代ld – 任何经验?

有没有人试图用gold而不是ld

gold 承诺要比ld快得多,所以它可能有助于加快大型C ++应用程序的testing周期,但是可以用它作为ld的替代品吗?

gcc / g++直接调用gold

有没有知道的错误或问题?

虽然gold自一段时间以来就是GNU binutils的一部分,但我几乎没有发现Web上的“成功故事”,甚至“Howtos”。

更新:添加链接黄金和博客条目解释

目前它正在Ubuntu 10.04上编译更大的项目。 在这里,您可以使用binutils-gold软件包轻松安装和集成它(如果您移除该软件包,则会得到旧的ld )。 那么Gcc会自动使用黄金。

一些经验:

  • 黄金不在/usr/local/lib
  • 黄金并不像pthread或rt那样使用libs,只能手动添加它们
  • 它速度更快,所需内存也更less(后者对大型C ++项目来说很重要)

什么不工作:它不能编译内核的东西,因此没有内核模块。 如果Ubuntu更新fglrx等专有驱动程序,Ubuntu会通过DKMS自动执行此操作。 这与ld-gold失败(你必须删除黄金,重新启动DKMS,重新安装ld-gold

因为我花了一点时间才发现如何有select地使用黄金(即不使用符号链接的系统),我会在这里发布解决scheme。 它基于http://code.google.com/p/chromium/wiki/LinuxFasterBuilds#Linking_using_gold

  1. build立一个你可以放置一个黄金胶水脚本的目录。 我正在使用~/bin/gold/
  2. 把下面的胶水脚本放在那里,并命名~/bin/gold/ld

     #!/bin/bash gold "$@" 

    显然,使它可执行, chmod a+x ~/bin/gold/ld

  3. 把你的调用改为gcc gcc -B$HOME/bin/gold ,这样gcc就可以在给定的目录中查找像ld这样的帮助程序,从而使用粘连脚本代替系统默认的ld

你可以链接ldgold (在本地二进制目录中,如果你安装了ld以避免覆盖):

 ln -s `which gold` ~/bin/ld 

要么

 ln -s `which gold` /usr/local/bin/ld 

gcc / g ++可以直接调用gold。

只是为了补充答案:有一个gcc的选项-fuse-ld=gold (请参阅gcc doc )。 虽然,AFAIK,但是可以在构build过程中configurationgcc,以使选项不起作用。

作为一名Samba开发人员,几年以来,我几乎一直在使用Ubuntu,Debian和Fedora上的金链接器。 我的评价:

  • 黄金比传统的连接器快了许多倍(感觉:5-10倍)。
  • 最初,有一些问题,但大约从Ubuntu 12.04以来。
  • 黄金链接器甚至在我们的代码中发现了一些依赖性问题,因为在某些细节方面它似乎比传统的更加正确。 看,例如, 这个桑巴提交 。

我没有select性地使用黄金,但是如果发行版提供的话,一直使用符号链接或替代机制。

有些项目似乎与黄金不相容,因为黄金和黄金之间有些不相容的区别。 例如:OpenFOAM,请参阅http://www.openfoam.org/mantisbt/view.php?id=685

DragonFlyBSD转换为黄金作为默认链接器。 所以它似乎准备好了各种各样的工具。
更多详情: http : //phoronix.com/scan.php?page=news_item&px=DragonFlyBSD-Gold-Linker