LINUX.ORG.RU

Ошибка при сборке GCC в crossdev

 , , , ,


1

3

Скачал я stage3-amd64-20161013.tar.bz2 и portage-latest.tar.bz2, распаковал, сделал туда chroot (все делал по инструкции из https://wiki.gentoo.org/wiki/Chroot/ru, исходная ОС - Ubuntu 14.04.5 LTS если это имеет какое-то значение), установил crossdev и решил вот это сделать:

# crossdev -v -t armv7-none-linux-gnueabi --g 4.9.3 --ov-output /usr/local/portage
Оно успешно собрало бинутилсы, но на этапе сборки GCC произошла ошибка
checking for armv7-none-linux-gnueabi-gcc... /var/tmp/portage/cross-armv7-none-linux-gnueabi/gcc-4.9.3/work/build/./gcc/xgcc -B/var/tmp/portage/cross-armv7-none-linux-gnueabi/gcc-4.9.3/work/build/./gcc/ -B/usr/armv7-none-linux-gnueabi/bin/ -B/usr/armv7-none-linux-gnueabi/lib/ -isystem /usr/armv7-none-linux-gnueabi/include -isystem /usr/armv7-none-linux-gnueabi/sys-include   
checking for suffix of object files... configure: error: in `/var/tmp/portage/cross-armv7-none-linux-gnueabi/gcc-4.9.3/work/build/armv7-none-linux-gnueabi/libgcc':
configure: error: cannot compute suffix of object files: cannot compile
See `config.log' for more details.
Makefile:9790: recipe for target 'configure-target-libgcc' failed
make[1]: *** [configure-target-libgcc] Error 1
make[1]: Leaving directory '/var/tmp/portage/cross-armv7-none-linux-gnueabi/gcc-4.9.3/work/build'
Makefile:840: recipe for target 'all' failed
make: *** [all] Error 2
 * ERROR: cross-armv7-none-linux-gnueabi/gcc-4.9.3::crossdev failed (compile phase):
 *   emake failed
 * 
 * If you need support, post the output of `emerge --info '=cross-armv7-none-linux-gnueabi/gcc-4.9.3::crossdev'`,
 * the complete build log and the output of `emerge -pqv '=cross-armv7-none-linux-gnueabi/gcc-4.9.3::crossdev'`.
 * The complete build log is located at '/var/tmp/portage/cross-armv7-none-linux-gnueabi/gcc-4.9.3/temp/build.log'.
 * The ebuild environment file is located at '/var/tmp/portage/cross-armv7-none-linux-gnueabi/gcc-4.9.3/temp/environment'.
 * Working directory: '/var/tmp/portage/cross-armv7-none-linux-gnueabi/gcc-4.9.3/work/build'
 * S: '/var/tmp/portage/cross-armv7-none-linux-gnueabi/gcc-4.9.3/work/gcc-4.9.3'
 * 
 * Please include /var/tmp/portage/cross-armv7-none-linux-gnueabi/gcc-4.9.3/work/gcc-build-logs.tar.bz2 in your bug report.
 * 

>>> Failed to emerge cross-armv7-none-linux-gnueabi/gcc-4.9.3, Log file:

>>>  '/var/tmp/portage/cross-armv7-none-linux-gnueabi/gcc-4.9.3/temp/build.log'
 * Messages for package cross-armv7-none-linux-gnueabi/gcc-4.9.3:
 * ERROR: cross-armv7-none-linux-gnueabi/gcc-4.9.3::crossdev failed (compile phase):
 *   emake failed
 * 
 * If you need support, post the output of `emerge --info '=cross-armv7-none-linux-gnueabi/gcc-4.9.3::crossdev'`,
 * the complete build log and the output of `emerge -pqv '=cross-armv7-none-linux-gnueabi/gcc-4.9.3::crossdev'`.
 * The complete build log is located at '/var/tmp/portage/cross-armv7-none-linux-gnueabi/gcc-4.9.3/temp/build.log'.
 * The ebuild environment file is located at '/var/tmp/portage/cross-armv7-none-linux-gnueabi/gcc-4.9.3/temp/environment'.
 * Working directory: '/var/tmp/portage/cross-armv7-none-linux-gnueabi/gcc-4.9.3/work/build'
 * S: '/var/tmp/portage/cross-armv7-none-linux-gnueabi/gcc-4.9.3/work/gcc-4.9.3'
 * 
 * Please include /var/tmp/portage/cross-armv7-none-linux-gnueabi/gcc-4.9.3/work/gcc-build-logs.tar.bz2 in your bug report.
 * 
вот config.log из /var/tmp/portage/cross-armv7-none-linux-gnueabi/gcc-4.9.3/work/build/armv7-none-linux-gnueabi/libgcc/ https://paste.fedoraproject.org/454717/51559147/

Вот конкретно момент, по которому видно, в чем проблема:

conftest.c:1:0: error: target CPU does not support ARM mode
 /* confdefs.h */
 ^
configure:3392: $? = 1
configure:3580: checking for suffix of object files
configure:3602: /var/tmp/portage/cross-armv7-none-linux-gnueabi/gcc-4.9.3/work/build/./gcc/xgcc -B/var/tmp/portage/cross-armv7-none-linux-gnueabi/gcc-4.9.3/work/build/./gcc/ -B/usr/armv7-none-linux-gnueabi/bin/ -B/usr/armv7-none-linux-gnueabi/lib/ -isystem /usr/armv7-none-linux-gnueabi/include -isystem /usr/armv7-none-linux-gnueabi/sys-include    -c -g -O2 -pipe  conftest.c >&5
conftest.c:1:0: error: target CPU does not support ARM mode
 /* confdefs.h */
 ^
configure:3606: $? = 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:3620: error: in `/var/tmp/portage/cross-armv7-none-linux-gnueabi/gcc-4.9.3/work/build/armv7-none-linux-gnueabi/libgcc':
configure:3623: error: cannot compute suffix of object files: cannot compile
See `config.log' for more details.
Там зачем-то проверяется, умеет ли мой процессор запускать ARM бинарники? Он и не обязан это уметь, я собираю кросскомпилятор. Как сделать чтобы crossdev собрал мне GCC который бы создавал бинари под ARM и запускался на x86-64?

Если нужны какие-то дополнительные логи - могу предоставить.

★★★

Во-первых ты не правильно расшифровал сообщение об ошибке. Тут нужно понимать как работает триада build/hostt/target при кросскомпиляции. target - это целевая система для которой будут генерироваться результирующие бинарники. Подробнее. Эта триада по первачу взрывает мозг, но достаточна гибка(кросс-компиляция кросс-компилятора, ага >_<)

Далее по-поводу флагов передаваемых crossdev - ты пробовал запустить его без указания версии компилятора? Или тебе нужен именно 4.9.3(по умолчанию собирается последний доступный из unstable для указанной архитектуры) ?

Pinkbyte ★★★★★ ()
Последнее исправление: Pinkbyte (всего исправлений: 2)
Ответ на: комментарий от Pinkbyte

Далее по-поводу флагов передаваемых crossdev - ты пробовал запустить его без указания версии компилятора? Или тебе нужен именно 4.9.3(по умолчанию собирается последний доступный из unstable для указанной архитектуры) ?

Пробовал. То же самое.

Поискал немного в гугле куски текста из config.log с ключевым словом «crossdev» и нагуглил вот это https://forums.gentoo.org/viewtopic-t-959172-start-0.html

Вот таким образом мне удалось собрать gcc:

USE="-fortran"  crossdev -v -t armv7a-hardfloat-linux-gnueabi --g 4.9.3 \
--env 'EXTRA_ECONF="--with-arch=armv7-a --with-fpu=neon-vfpv4 --with-float-abi=soft"'
Это вообще нормально, что оно собирается только если указывать эти EXTRA_ECONF? Стоит ли это репортить куда-нибудь в багзиллу?
Кросскомпилровать мне кстати надо под cortex-a17, надеюсь, я все правильно делаю

SZT ★★★ ()

У меня было что-то похожее при сборке для avr. Выяснилось, что для тулчейнского компилятора флаги надо задавать руками, по умолчанию там нет очень многих вещей. Посмотри выхлоп equery u cross-armv7-none-linux-gnueabi/gcc — мне помогло включение компилятора плюсов и ещё ряда юзов

XMs ★★★★★ ()
Ответ на: комментарий от SZT

Это вообще нормально, что оно собирается только если указывать эти EXTRA_ECONF?

Нет

Стоит ли это репортить куда-нибудь в багзиллу?

Да

Pinkbyte ★★★★★ ()

Похоже что собирать crossdev в gentoo через chroot из другого дистрибутива было не очень хорошей идеей, попробую через виртуалку. Если и с виртуалкой будут какие-то грабли, поставлю генту в дуалбут (или вообще перейду на генту, может быть даже из виртуалки тупо перекопирую). И да, для -mfloat-abi=softfp -mfpu=neon-vfpv4 надо делать armv7a-softfp-linux-gnueabi а не armv7a-hardfloat-linux-gnueabi

Буду разбираться дальше

SZT ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.