Ошибка компиляции libgcc xgcc

Я пытаюсь установить кросс-компилятор, это руководство, и когда я хочу сделать libgcc, я просто поместите make all-target-libgcc в мой терминал. Это делает ошибку

checking whether ln -s works... yes
checking for i586-elf-gcc...  /usr/src/build-gcc/./gcc/xgcc -B/usr/src/build-gcc/./gcc/         -B/usr/local/cross/i586-elf/bin/ -B/usr/local/cross/i586-elf/lib/ -isystem /usr/local/cross/i586-elf/include -isystem /usr/local/cross/i586-elf/sys-include   
checking for suffix of object files... configure: error: in `/usr/src/build-gcc/i586-elf/libgcc':
configure: error: cannot compute suffix of object files: cannot compile
See `config.log' for more details.
make: *** [configure-target-libgcc] Error 1

В config.log я нашел

Target: i586-elf
Configured with: ../gcc-4.8.0/configure --target=i586-elf --prefix=/usr/local/cross --        disable-nls --enable-languages=c,c++ --without-headers : (reconfigured) ../gcc-4.8.0/configure --target=i586-elf --prefix=/usr/local/cross --disable-nls --enable-languages=c,c++ --without-headers : (reconfigured) ../gcc-4.8.0/configure --target=i586-elf --prefix=/usr/local/cross --disable-nls --enable-languages=c,c++ --without-headers
Thread model: single
gcc version 4.8.0 (GCC) 
configure:3358: $? = 0
configure:3347:  /usr/src/build-gcc/./gcc/xgcc -B/usr/src/build-gcc/./gcc/ -    B/usr/local/cross/i586-elf/bin/ -B/usr/local/cross/i586-elf/lib/ -isystem /usr/local/cross/i586-elf/include -isystem /usr/local/cross/i586-elf/sys-include    -V >&5
xgcc: error: unrecognized command line option '-V'
xgcc: fatal error: no input files

На самом деле xgcc не имеет опции -V. Ищу способ скомпилировать libgcc.

заранее спасибо


person Johniak    schedule 18.04.2013    source источник
comment
Обычно libgcc является частью компилятора GCC, поэтому его следует собирать с помощью GCC. Для его постройки не требуются особые действия.   -  person Basile Starynkevitch    schedule 18.04.2013
comment
Здесь та же ошибка. gcc версии 4.8.1 (GCC)   -  person e19293001    schedule 02.08.2013


Ответы (3)


Вот проблема: прежде чем вы попытались собрать libgcc, как вы описали, вы создали чрезвычайно простой кросс-компилятор. Теперь часть стандартных тестов, которые запускает скрипт конфигурации, заключается в том, чтобы проверить компилятор, чтобы увидеть, будет ли он создавать рабочий исполняемый файл при нормальных условиях. Ваш компилятор голых костей не может. К счастью, для libgcc вам не нужно создавать исполняемый файл, а только статическую библиотеку libgcc.a. Проблема в том, что глупый сценарий, созданный GNU autoconf, этого не понимает.

Я столкнулся с той же проблемой и разработал очень уродливый обходной путь. Вам необходимо закомментировать раздел файла libgcc / configure в исходном каталоге gcc. Вот раздел, который я закомментировал для своей версии; сделай что-нибудь похожее на твоё:

В строке 3484:

{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
$as_echo "$ac_file" >&6; }
# BEGIN PHILLIP EDIT
# if test -z "$ac_file"; then :
  # $as_echo "$as_me: failed program was:" >&5
# sed 's/^/| /' conftest.$ac_ext >&5

# { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
# $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
# { as_fn_set_status 77
# as_fn_error "C compiler cannot create executables
# See \`config.log' for more details." "$LINENO" 5; }; }
# fi
ac_file='a.out'
# END PHILLIP EDIT
ac_exeext=$ac_cv_exeext

Надеюсь это поможет.

person Phillip A    schedule 07.10.2014
comment
Пробовал несколько версий GCC, всегда одинаково. Ваш ответ, кажется, единственный, который решает мою проблему. - person Han Qiu; 23.12.2016

Я столкнулся с аналогичной проблемой, пытаясь собрать libstdc ++ самостоятельно. Параметры конфигурации --enable-offload-target=x86_64-pc-linux-gnu решают проблему и --disable-bootstrap сэкономили довольно много времени на компиляцию. После добавления прежнего флага make all-target-libstdc++-v3 перестал жаловаться на xgcc, и компилятор не может создавать исполняемые файлы. Вышеупомянутый патч не нужен, надеюсь, это поможет кому-то другому.

person Alex Barker    schedule 17.04.2018

Комментируя следующий раздел в файле libgcc/configure, я решил эту проблему. См. https://stackoverflow.com/a/26245344/8138184 для получения дополнительной информации о файле конфигурации.

# for ac_option in --version -v -V -qversion; do
#   { { ac_try="$ac_compiler $ac_option >&5"
# case "(($ac_try" in
#   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
#   *) ac_try_echo=$ac_try;;
# esac
# eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
# $as_echo "$ac_try_echo"; } >&5
#   (eval "$ac_compiler $ac_option >&5") 2>conftest.err
#   ac_status=$?
#   if test -s conftest.err; then
#     sed '10a\
# ... rest of stderr output deleted ...
#          10q' conftest.err >conftest.er1
#     cat conftest.er1 >&5
#     rm -f conftest.er1 conftest.err
#   fi
#   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
#   test $ac_status = 0; }
# done
person NSaran    schedule 15.01.2021