2015-02-14 2 views
2

Я недавно переключился с default binutils linker ld.bfd на ld.gold (чтобы получить оптимизацию времени ссылки и почему нет?). Это было сделано вручную (например, здесь: http://wiki.gentoo.org/wiki/Gold). В результате я получил цепочку символических ссылок из/usr/bin/ld в двоичный файл ld.gold, поэтому компоновщик был прозрачно изменен для процесса сборки.gentoo ld.gold failed on sys-libs/db

Но когда я попытался восстановить все пакеты, я обнаружил, что 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 (тот, который привлек мое внимание на данный момент).

ответ

4

Решение, которое приходит мне на ум, заключается в использовании модификации среды для каждого пакета через package.env. В проблемном пакете используется libtool, который вызывает gcc как компоновщик, поэтому необходимо добавить значение -Wl,-fuse-ld=bfd (на этапе link, 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