sys-libs / db上的gentoo ld.gold失败

时间:2015-02-14 20:48:55

标签: c linker ld gentoo gold-linker

我最近从默认的binutils链接器ld.bfd切换到ld.gold(为了使链接时间优化工作,为什么不工作?)。它是手工制作的(如:http://wiki.gentoo.org/wiki/Gold)。结果我从/ usr / bin / ld获得了符号链接到ld.gold二进制文件,因此链接器被透明地更改为构建过程。

但是当我尝试重建所有软件包时,我发现ld.gold有时会导致配置/编译失败,例如" C编译器无法创建可执行文件":

checking for x86_64-pc-linux-gnu-gcc... x86_64-pc-linux-gnu-gcc                                    
checking whether the C compiler works... no                                                      
configure: error: in `/var/tmp/portage/sys-libs/db-6.0.30-r1/work/db-6.0.30/build_unix-abi_x86_64.amd64':
configure: error: C compiler cannot create executables                                           

实际上是链接器问题:

configure: checking whether the C compiler works                                                   
/usr/lib/gcc/x86_64-pc-linux-gnu/4.8.4/../../../../x86_64-pc-linux-gnu/bin/ld: --default-symver: unknown option
/usr/lib/gcc/x86_64-pc-linux-gnu/4.8.4/../../../../x86_64-pc-linux-gnu/bin/ld: use the --help option for usage information
collect2: error: ld returned 1 exit status

但是可以使用默认的bfd链接器成功构建包,所以问题是如何回到bfd链接器以获取不能用ld.gold构建的包?

问题包是= sys-libs / db-6.0.30-r1(现在引起我注意的那个)。

1 个答案:

答案 0 :(得分:5)

我想到的解决方案是通过package.env使用环境每包修改。在问题包中使用libtool,它调用gcc作为链接器,因此需要添加的是-Wl,-fuse-ld=bfd(在链接阶段,LDFLAGS)。

所以,完整的解决方案是:

mkdir -p /etc/portage/env                                                                          
echo 'LDFLAGS="${LDFLAGS} -Wl,-fuse-ld=bfd"' >> /etc/portage/env/force-bfd.conf                    
echo 'sys-libs/db force-bfd.conf' >> /etc/portage/package.env