我一直在尝试在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版本。如何启用黄金链接器进行链接时优化? 我怎样才能使它成为默认的链接器?
答案 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=ld
或clang -print-prog-name=ld
找出编译器使用的ld。打印的文件应该是一个符号链接,您可以重新创建该符号链接以指向ld.gold
,并选择ld.bfd
。