用黄金取代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 。
- build立一个你可以放置一个黄金胶水脚本的目录。 我正在使用
~/bin/gold/
。 -
把下面的胶水脚本放在那里,并命名
~/bin/gold/ld
:#!/bin/bash gold "$@"
显然,使它可执行,
chmod a+x ~/bin/gold/ld
。 -
把你的调用改为
gcc
gcc -B$HOME/bin/gold
,这样gcc就可以在给定的目录中查找像ld
这样的帮助程序,从而使用粘连脚本代替系统默认的ld
。
你可以链接ld
到gold
(在本地二进制目录中,如果你安装了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