Компиляция gcc 4.6.2 (не может вычислить суффикс объектных файлов) - PullRequest
13 голосов
/ 04 февраля 2012

Проблема при компиляции gcc 4.6.2:

checking for avr-gcc... /data/data6/soft/src_build/gcc-4.6.2/host-x86_64-unknown-linux-gnu/gcc/xgcc -B/data/data6/soft/src_build/gcc-4.6.2/host-x86_64-unknown-linux-gnu/gcc/ -B/data/data6/soft/programming/gcc-avr/avr/bin/ -B/data/data6/soft/programming/gcc-avr/avr/lib/ -isystem /data/data6/soft/programming/gcc-avr/avr/include -isystem /data/data6/soft/programming/gcc-avr/avr/sys-include 
checking for suffix of object files... configure: error: in `/data/data6/soft/src_build/gcc-4.6.2/avr/libgcc':
configure: error: cannot compute suffix of object files: cannot compile
See `config.log' for more details.

В моем gcc-4.6.2 / avr / libgcc / config.log я нашел:

configure:3268: /data/data6/soft/src_build/gcc-4.6.2/host-x86_64-unknown-linux-gnu/gcc/xgcc -B/data/data6/soft/src_build/gcc-4.6.2/host-x86_64-unknown-linux-gnu/gcc/ -B/data/data6/soft/programming/gcc-avr/avr/bin/ -B/data/data6/soft/programming/gcc-avr/avr/lib/ -isystem /data/data6/soft/programming/gcc-avr/avr/include -isystem /data/data6/soft/programming/gcc-avr/avr/sys-include -c -g -O2 conftest.c >&5
exec: 89: -o: not found
configure:3272: $? = 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 ""
| /* end confdefs.h. */
| 
| int
| main ()
| {
| 
| ;
| return 0;
| }
configure:3286: error: in `/data/data6/soft/src_build/gcc-4.6.2/avr/libgcc':
configure:3289: error: cannot compute suffix of object files: cannot compile
See `config.log' for more details.

Если эта команда запускается напрямую (после создания conftest.c), вывод будет таким же.

Что такое exec: 89: -o: не найдено? Какую программу написать? Где 89 линия?

Такие решения, как экспорт LD_CONFIG_PATH или добавление строк в /etc/ld.so.conf с указанием пути к GMP, MPFR, MPC, не работают для меня.

Где найти решение этой проблемы?

Обновление. Кажется, это проблема конфигурации. У Gcc есть очень хорошая опция -v :-) И я вижу, что это вызов ассемблера от gcc, который не удается С опцией -save-temps я сохранил источник ассемблера и запустил ассемблер, но это не имеет значения.

Вместо того, чтобы вызывать настоящий ассемблер, он вызывает оболочку сценария оболочки, в моем случае / data / data6 / soft / src_build / avr-gcc / gcc / as, которая начинается с:

ORIGINAL_AS_FOR_TARGET=""
ORIGINAL_LD_FOR_TARGET=""
ORIGINAL_PLUGIN_LD_FOR_TARGET=""
ORIGINAL_NM_FOR_TARGET=""

И когда он формирует вызов командной строки, мы имеем это:

exec -o conftest.o conftest.s

, который выходит из строя, как описано выше.

Где это нужно исправить? Чтобы получить звонок, как это: exec as -o conftest.o conftest.s

Где хорошее место для установки переменной ORIGINAL_AS_FOR_TARGET?

Ответы [ 2 ]

4 голосов
/ 12 ноября 2012

У меня была такая же проблема кросс-компиляции для mips.

Шаг первый: кросс-компиляция binutils для вашей цели. Установите их где-нибудь в здравом уме. Я использую / usr / local / [target] -gcc

Убедитесь, что вы настроили их с помощью --program-prefix = [target] -

Что-то вроде (не проверено):

configure --prefix=/usr/local/avr-gcc --program-prefix=avr- --target=avr

Затем вам нужно настроить некоторые переменные окружения, чтобы GCC мог их найти:

export AR_FOR_TARGET=/usr/local/avr-gcc/bin/avr-ar
export LD_FOR_TARGET=/usr/local/avr-gcc/bin/avr-ld
export OBJDUMP_FOR_TARGET=/usr/local/avr-gcc/bin/avr-objdump
export NM_FOR_TARGET=/usr/local/avr-gcc/bin/avr-nm
export RANLIB_FOR_TARGET=/usr/local/avr-gcc/bin/avr-ranlib
export READELF_FOR_TARGET=/usr/local/avr-gcc/bin/avr-readelf
export STRIP_FOR_TARGET=/usr/local/avr-gcc/bin/avr-strip
export AS_FOR_TARGET=/usr/local/avr-gcc/bin/avr-as

Теперь вы можете настраивать и компилировать GCC. Убедитесь, что вы запускаете из полностью пустой директории сборки, иначе gcc / as и т. Д. Не будут воссозданы.

2 голосов
/ 25 апреля 2013

"* Построение GCC не является тривиальным, но не сложным, если вы будете тщательно следовать инструкциям. Многие люди спешат попытаться собрать его, не читая правильно документы по установке, и делают одну или несколько из следующих распространенных ошибок:

1) не запускать ./configure из gcc src dir (это не поддерживается) => вам нужно запустить configure из-за пределов исходного каталога gcc

2) Примечание: если GCC динамически связывается с необходимыми библиотеками (GMP / MPFR / MPC), то совместно используемые библиотеки должны находиться в пути динамического компоновщика (LD_LIBRARY_PATH), как при сборке gcc, так и при использовании установленного компилятора. * "

Простой пример (без динамической ссылки на GMP / MPFR / MPC):

tar xzf gcc-4.8.0.tar.gz
cd gcc-4.8.0
./contrib/download_prerequisites
cd ..
mkdir objdir
cd objdir
$PWD/../gcc-4.8.0/configure --prefix=/opt/gcc-4.8.0 
make
make install

Источники: Advogato Doc - GNU Doc

...