gentoo ld.gold се провали на sys-libs/db

Наскоро преминах от стандартния binutils linker 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 (този, който привлече вниманието ми за сега).


person Alexander Sergeyev    schedule 14.02.2015    source източник


Отговори (1)


Решението, което ми идва на ум -- е да се използва модифициране на среда за всеки пакет чрез 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                                  
person Alexander Sergeyev    schedule 14.02.2015