Я пытаюсь собрать gcc-5.3 и binutils-2.26. Я сделал это так:
mkdir gcc; cd gcc
wget http://path/to/gcc-5.3.0.tar.bz2
wget http://path/to/binutils-2.26.tar.bz2
tar xf gcc-5.3.0.tar.bz2
tar xf binutils-2.26.tar.bz2
cd gcc-5.3.0
contrib/download_prerequisites
for file in ../binutils-2.26/*; do ln -s "${file}"; done
cd ..
mkdir build
mkdir dist
cd build
../gcc-5.3.0/configure --prefix=/home/teamcity/gcc/dist --disable-multilib --with-system-zlib --enable-languages=c,c++,fortran --program-suffix=-mine
make
Это похоже на сборку исполняемых файлов первого этапа. prev-gas
, prev-gcc
, prev-ld
все присутствуют с правдоподобно выглядящими исполняемыми файлами в них. Но следующий этап не проходит:
Configuring stage 2 in ./intl
configure: loading cache ./config.cache
checking whether make sets $(MAKE)... yes
checking for a BSD-compatible install... /usr/bin/install -c
checking whether NLS is requested... yes
checking for msgfmt... /usr/bin/msgfmt
checking for gmsgfmt... /usr/bin/msgfmt
checking for xgettext... /usr/bin/xgettext
checking for msgmerge... /usr/bin/msgmerge
checking for x86_64-unknown-linux-gnu-gcc... /home/teamcity/gcc/build/./prev-gcc/xgcc -B/home/teamcity/gcc/build/./prev-gcc/ -B/home/teamcity/gcc/dist/x86_64-unknown-linux-gnu/bin/ -B/home/teamcity/gcc/dist/x86_64-unknown-linux-gnu/bin/ -B/home/teamcity/gcc/dist/x86_64-unknown-linux-gnu/lib/ -isystem /home/teamcity/gcc/dist/x86_64-unknown-linux-gnu/include -isystem /home/teamcity/gcc/dist/x86_64-unknown-linux-gnu/sys-include -L/home/teamcity/gcc/build/./ld
checking for C compiler default output file name...
configure: error: in `/home/teamcity/gcc/build/intl':
configure: error: C compiler cannot create executables
See `config.log' for more details.
Соответствующий бит config.log выглядит так:
configure:2978: checking for C compiler default output file name
configure:3000: /home/teamcity/gcc/build/./prev-gcc/xgcc -B/home/teamcity/gcc/build/./prev-gcc/ -B/home/teamcity/gcc/dist/x86_64-unknown-linux-gnu/bin/ -B/home/teamcity/gcc/dist/x86_64-unkn
own-linux-gnu/bin/ -B/home/teamcity/gcc/dist/x86_64-unknown-linux-gnu/lib/ -isystem /home/teamcity/gcc/dist/x86_64-unknown-linux-gnu/include -isystem /home/teamcity/gcc/dist/x86_64-unknown-l
inux-gnu/sys-include -L/home/teamcity/gcc/build/./ld -g -O2 -gtoggle -static-libstdc++ -static-libgcc conftest.c >&5
/home/teamcity/gcc/build/./prev-gcc/as: 106: exec: /home/teamcity/gcc/build/./gas/as-new: not found
Это выглядит как предыдущие GCC, как и ожидал найти gas/as-new
когда на самом деле это prev-gas/as-new
,
Есть ли какое-то решение для этого? Это безопасно просто ln -s prev-gas gas
? Я бы ожидал, что это вызовет проблемы позже. Разве нельзя собрать эти две версии gcc и binutils вместе?
Это мой отредактированный ответ после того, как я попробовал его на виртуальной машине Ubuntu 14.04 Azure.
У меня сработал следующий подход:
/root/objdir/../gcc-5.3.0/configure --prefix=/opt/gcc-5.3.0
--enable-languages=c,c++ --disable-multilib --with-ld=/opt/gcc-5.3.0/bin/ld --with-as=/opt/gcc-5.3.0/bin/as
предполагая, что gcc-5.3.0 и каталог сборки, objdir
, в то жеmake
с последующим make install
в objdir
построить каталог.Чтобы убедиться, что ld
используется недавно построенный gcc
это один из новых binutils:
/opt/gcc-5.3.0/bin/gcc -print-prog-name=ld
Вывод должен быть, в этом примере:
/opt/gcc-5.3.0/bin/ld
Еще один тест: переименуйте систему ld
, в моем случае /usr/bin/ld
; недавно построенный gcc должен все еще работать.
Конечно, это относится как к ld
а также as
,
Установка переменных среды AS и LD для указания на вновь созданные двоичные файлы из пакета binutils не работали: -print-prog-name=...
все еще показывал инструменты по умолчанию, а удаление / переименование инструментов по умолчанию вызывало сбой gcc.
Таким образом, лучший способ сделать это — сначала собрать binutils, а затем использовать --with-ld
а также --with-as
варианты configure
, Если вы также хотите убедиться, что недавно созданные binutils используются для сборки GCC, вы можете поместить их в переменную PATH до системных инструментов или даже переименовать системные инструменты, чтобы они не попадали в картина.
Спасибо за проверку с помощью другого списка рассылки, чтобы убедиться, что сборка GCC и binutils вместе не работает, если они не извлечены из системы контроля версий, я думаю, что эта опция неприменима при использовании загруженных tar-архивов. В целом это было интересное упражнение.
Других решений пока нет …