【问题标题】:Enabling the gold linker on Freebsd在 Freebsd 上启用黄金链接器
【发布时间】:2015-09-07 14:11:07
【问题描述】:

我一直在尝试启用 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 版本。如何启用黄金链接器以进行链接时间优化? 还有我怎样才能让它成为默认链接器?

【问题讨论】:

标签: clang llvm freebsd gold-linker


【解决方案1】:

您可能想要使用ld.gold 而不是ld。它安装在/usr/local/bin/ld.gold。如果您使用的是 Makefile,它可以通过将 LD 变量设置为 ld.gold 来工作,或者通过修改您的 Makefile 或在命令行中指定它。使用lang/clang37的示例:

gmake all CC=clang37 LD=ld.gold

编辑:

如果您将-fuse-ld=gold 添加到您的 LDFLAGS 中会更加简洁:

LDFLAGS=-fuse-ld=gold

【讨论】:

    【解决方案2】:

    我不确定 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

    【讨论】:

    • /usr/bin/ld 只是到 /usr/bin/ld 的符号链接。我很困惑为什么有三个 lds
    • bfd 链接器确实允许插件,但 LLVMgold 插件不能与 bfd 链接器一起使用。
    猜你喜欢
    • 2015-08-17
    • 2014-03-31
    • 2016-11-27
    • 2016-10-02
    • 2014-07-08
    • 2017-12-12
    • 2017-08-31
    • 2017-03-25
    • 2011-11-18
    相关资源
    最近更新 更多