Кросс-компиляция старой версии gcc (4.8.2) в Ubuntu 14.04 завершается сбоем в сценарии настройки

avatar
exclamationmark
9 августа 2021 в 06:32
174
0
3

Я потратил несколько дней, пытаясь кросс-компилировать gcc 4.8.2, чтобы использовать сгенерированный компилятор для компиляции более старой версии strace для системы MIPS с обратным порядком байтов, и в основном я следовал это руководство: https://comparch-resources.ece.gatech.edu/resources/gcc-mips/gcc-from-source/

Все в этом руководстве работает вплоть до пересборки gcc с помощью newlib. После выполнения этой команды восстановления я получаю следующую ошибку:

checking for mips-linux-gnu-gcc... /opt/cross/gcc-build/./gcc/xgcc -B/opt/cross/gcc-build/./gcc/ -B/opt/cross/gcc-mips/mips-linux-gnu/bin/ -B/opt/cross/gcc-mips/mips-linux-gnu/lib/ -isystem /opt/cross/gcc-mips/mips-linux-gnu/include -isystem /opt/cross/gcc-mips/mips-linux-gnu/sys-include   
checking for suffix of object files... configure: error: in `/opt/cross/gcc-build/mips-linux-gnu/libgcc':
configure: error: cannot compute suffix of object files: cannot compile
See `config.log' for more details.
make[1]: *** [configure-target-libgcc] Error 1
make[1]: Leaving directory `/opt/cross/gcc-build'
make: *** [all] Error 2

Вот частичная выдержка из /opt/cross/gcc-build/mips-linux-gnu/libgcc/config.log:

Configured with: ../gcc-4.8.2/configure --target=mips-linux-gnu --prefix=/opt/cross/gcc-mips --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --disable-multilib --with-newlib
Thread model: posix
gcc version 4.8.2 (GCC)
configure:3358: $? = 0
configure:3347: /opt/cross/gcc-build/./gcc/xgcc -B/opt/cross/gcc-build/./gcc/ -B/opt/cross/gcc-mips/mips-linux-gnu/bin/ -B/opt/cross/gcc-mips/mips-linux-gnu/lib/ -isystem /opt/cross/gcc-mips/mips-linux-gnu/include -isystem /opt/cross/gcc-mips/mips-linux-gnu/sys-include    -V >&5
xgcc: error: unrecognized command line option '-V'
xgcc: fatal error: no input files
compilation terminated.
configure:3358: $? = 1
configure:3347: /opt/cross/gcc-build/./gcc/xgcc -B/opt/cross/gcc-build/./gcc/ -B/opt/cross/gcc-mips/mips-linux-gnu/bin/ -B/opt/cross/gcc-mips/mips-linux-gnu/lib/ -isystem /opt/cross/gcc-mips/mips-linux-gnu/include -isystem /opt/cross/gcc-mips/mips-linux-gnu/sys-include    -qversion >&5
xgcc: error: unrecognized command line option '-qversion'
xgcc: fatal error: no input files
compilation terminated.
configure:3358: $? = 1
configure:3374: /opt/cross/gcc-build/./gcc/xgcc -B/opt/cross/gcc-build/./gcc/ -B/opt/cross/gcc-mips/mips-linux-gnu/bin/ -B/opt/cross/gcc-mips/mips-linux-gnu/lib/ -isystem /opt/cross/gcc-mips/mips-linux-gnu/include -isystem /opt/cross/gcc-mips/mips-linux-gnu/sys-include    -o conftest -g -O2 -Wno-error -minterlink-mips16   conftest.c  >&5
/opt/cross/gcc-build/./gcc/as: 87: exec: -EB: not found
configure:3377: $? = 1
configure:3565: checking for suffix of object files
configure:3587: /opt/cross/gcc-build/./gcc/xgcc -B/opt/cross/gcc-build/./gcc/ -B/opt/cross/gcc-mips/mips-linux-gnu/bin/ -B/opt/cross/gcc-mips/mips-linux-gnu/lib/ -isystem /opt/cross/gcc-mips/mips-linux-gnu/include -isystem /opt/cross/gcc-mips/mips-linux-gnu/sys-include    -c -g -O2 -Wno-error -minterlink-mips16  conftest.c >&5
/opt/cross/gcc-build/./gcc/as: 87: exec: -EB: not found
configure:3591: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "GNU C Runtime Library"
| #define PACKAGE_TARNAME "libgcc"
| #define PACKAGE_VERSION "1.0"
| #define PACKAGE_STRING "GNU C Runtime Library 1.0"
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL "http://www.gnu.org/software/libgcc/"
| /* end confdefs.h.  */
|
| int
| main ()
| {
|
|   ;
|   return 0;
| }
configure:3605: error: in `/opt/cross/gcc-build/mips-linux-gnu/libgcc':
configure:3608: error: cannot compute suffix of object files: cannot compile
See `config.log' for more details.

Открывая /opt/cross/gcc-build/gcc/as, мы видим, что строка 87 — это exec $original ${1+"$@"}, и поскольку exec пытается выполнить -EB, а не <correct compiler> -EB, я думаю, что это означает, что <62816749> пусто (т.е. не установлено) при вызове exec. Однако я не уверен, какой компилятор $original должен быть установлен для того, чтобы скрипт configure не дал сбой, и я пробовал различные варианты, такие как /opt/cross/gcc-build/./gcc/xgcc, но все они терпели неудачу.

Хотя внешне этот пост кажется похожим на некоторые другие из более старых времен, я не думаю, что кто-то еще столкнулся с этим конкретным препятствием с проблемой exec. Таким образом, любая помощь будет принята с благодарностью!

Источник
alagner
9 августа 2021 в 06:42
0

Возможно, глупый вопрос, но пробовали ли вы передать «--build и --host», установленные для архитектуры вашей локальной машины, вместо того, чтобы устанавливать только «--target»?

exclamationmark
9 августа 2021 в 06:45
0

На самом деле нет. Что я должен предоставить в эти поля? Я предполагаю, что --host должен быть похож на x86_64 или что-то в этом роде, но как насчет --build? Спасибо за быстрый ответ!

alagner
9 августа 2021 в 06:50
0

См. это. Но, как правило, хост и сборка должны быть одинаковыми, если вы не делаете «канадский», то есть компилятор сборки на X (сборка), который будет запускаться на Y (хост) и создает двоичный файл для Z (цель). Обычно host==build.

alagner
9 августа 2021 в 06:55
0

Что касается самой настройки: скорее всего это будет amd64-linux-gnu или x86_64-linux-gnu. Поскольку Ubuntu обычно основан на Debian, может быть применим триплет Debian.

exclamationmark
9 августа 2021 в 07:06
0

Ссылку посмотрю, большое спасибо за ссылку. Надеюсь, это продвинет меня дальше в этом процессе, но, если повезет, кто знает, ха-ха; отчитаюсь завтра.

exclamationmark
9 августа 2021 в 07:37
0

Хм, теперь, когда я делаю ../gcc-4.8.2/configure --target=mips-linux-gnu --prefix=$PREFIX --host=amd64-linux-gnu --build=amd64-linux-gnu --with-newlib --without-headers --with-gnu-as --with-gnu-ld --disable-shared --disable-threads --disable-libssp --enable-languages=c, я получаю сообщение об ошибке crt1.o, -lc, crti.o не найдено. Я думаю, что это из-за проблем с sysroot, но когда я устанавливаю свой sysroot через CFLAGS, я думаю, что это приводит к «конфигурации: ошибка: компилятор C не может создавать исполняемые файлы».

stark
9 августа 2021 в 10:55
0

См. coderhelper.com/q/6329887/1216776 для различных возможностей

Ответы (0)