Gentoo ld.gold не удалось на sys-libs/db

Я недавно переключился с компоновщика 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 ответ

Решение

Решение, которое приходит мне в голову, - это использование среды для каждой модификации пакета через 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                                  
Другие вопросы по тегам