C gentoo ld.gold在sys libs/db上失败

C gentoo ld.gold在sys libs/db上失败,c,linker,ld,gentoo,gold-linker,C,Linker,Ld,Gentoo,Gold Linker,我最近从默认的binutils链接器ld.bfd切换到了ld.gold(为了让链接时间优化工作,为什么不呢?)。它是手工制作的(比如这里:)。结果我得到了从/usr/bin/ld到ld.gold二进制的符号链接链,所以链接器在构建过程中被透明地更改 但当我尝试重建所有包时,我发现ld.gold有时会导致配置/编译失败,如“C编译器无法创建可执行文件”: 这实际上是链接器的问题: configure: checking whether the C compiler works

我最近从默认的binutils链接器ld.bfd切换到了ld.gold(为了让链接时间优化工作,为什么不呢?)。它是手工制作的(比如这里:)。结果我得到了从/usr/bin/ld到ld.gold二进制的符号链接链,所以链接器在构建过程中被透明地更改

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

这实际上是链接器的问题:

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链接器可以成功构建包,所以问题是,对于无法使用ld.gold构建的包,如何返回bfd链接器


问题包是=sys libs/db-6.0.30-r1(目前引起我注意的问题包)。

我想到的解决方案是通过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                                  
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