在Freebsd上启用黄金链接器

时间:2015-06-22 07:52:56

标签: clang llvm freebsd gold-linker

我一直在尝试在FreeBSD上启用黄金链接器来使用链接时优化。我从/ usr / ports下的binutils制作了黄金。在使用make -k install clean构建binutils后,我得到/ usr / bin下的ld,在/ usr / local / bin目录下我得到了ld,ld.gold和ld.bfd。

现在尝试使用链接时间优化来简化示例程序http://llvm.org/docs/GoldPlugin.html(a.c和b.c,标题为“链接时间优化示例”)时,我按如下方式输入了四个命令:

clang -flto a.c -c -o a.o 
ar q a.a a.o 
clang b.c -c -o b.o 
clang -flto a.a b.o -o main

我收到以下错误:

usr/bin/ld: unrecogonized option '-plugin'
usr/bin/ld: use the --help option for usage information
clang: error: linker command failed with exit code 1 (use -v to see invocation)

链接器是否存在未调用ld.gold的问题。我应该用ld.gold替换ld吗?链接器是否在.so插件中找到正确的方向?

LLVMgold.so和libLTO.so共享对象位于/ usr / local / llvm-devel / lib /目录中。 我找不到安装clang的目录。我不知道在哪里制作bfd-plugins目录并将符号链接添加到LLVMgold.so和libLTO.so。

我使用的是freebsd 10.1版本。如何启用黄金链接器进行链接时优化? 我怎样才能使它成为默认的链接器?

2 个答案:

答案 0 :(得分:1)

您可能希望使用ld.gold代替ld。它安装在/usr/local/bin/ld.gold。如果您使用的是Makefile,则可以通过修改Makefile或在命令行上指定它来将LD变量设置为ld.gold。使用lang/clang37时的示例:

gmake all CC=clang37 LD=ld.gold

编辑:

如果你向你的LDFLAGS添加-fuse-ld=gold,它会更加整洁:

LDFLAGS=-fuse-ld=gold

答案 1 :(得分:0)

我不确定ld.bfd允许使用插件,但我可能错了。

您的/usr/bin/ld应该是您想要的任何链接器的符号链接。您可以使用binutils-config更改使用的链接器。查看此处的手册页:http://www.linuxhowtos.org/manpages/8/binutils-config.htm。我意识到这是一个Linux链接,但它是针对binutils本身而不是特定于linux的。

它应该是binutils-config --gold行。 在我的Gentoo框中,它是binutils --linker=gold

编辑:正如所指出的那样,binutils-config似乎并不适用于BSD。您仍然可以手动更新符号链接,但缺点是可能存在一些符号链接。 您可以使用gcc -print-prog-name=ldclang -print-prog-name=ld找出编译器使用的ld。打印的文件应该是一个符号链接,您可以重新创建该符号链接以指向ld.gold,并选择ld.bfd