LINUX.ORG.RU

cross gcc вызывает не тот ассемблер!


0

1

Собираю GCC так:
../configure --target=arm-none-linux-gnueabi --prefix=/home/misha/KDE/src/toolchains/arm-none-linux-gnueabi/build/gcc-core-static --with-local-prefix=/usr/local/toolchains/arm/arm-none-linux-gnueabi//sys-root --disable-multilib --disable-libmudflap --with-sysroot=/usr/local/toolchains/arm/arm-none-linux-gnueabi//sys-root --with-newlib --enable-threads=no --disable-shared --with-pkgversion=myconfig --enable-__cxa_atexit --enable-target-optspace --disable-nls --enable-symvers=gnu --enable-languages=c

При этом определены переменные
export AR_FOR_TARGET=/usr/local/toolchains/arm/bin/arm-none-linux-gnueabi-ar
export AS_FOR_TARGET=/usr/local/toolchains/arm/bin/arm-none-linux-gnueabi-as
export LD_FOR_TARGET=/usr/local/toolchains/arm/bin/arm-none-linux-gnueabi-ld
export NM_FOR_TARGET=/usr/local/toolchains/arm/bin/arm-none-linux-gnueabi-nm
export OBJDUMP_FOR_TARGET=/usr/local/toolchains/arm/bin/arm-none-linux-gnueabi-objdump
export RANLIB_FOR_TARGET=/usr/local/toolchains/arm/bin/arm-none-linux-gnueabi-ranlib
export STRIP_FOR_TARGET=/usr/local/toolchains/arm/bin/arm-none-linux-gnueabi-strip

И при конфигурации вроде эти результаты сбора binutils находится

далее
make all-gcc
make install-gcc

Попытка компиляции простенькой проги с int main() {} с помощью этого компилятора и опции -v показывает что
Using built-in specs.
Target: arm-none-linux-gnueabi
Configured with: ../configure --target=arm-none-linux-gnueabi --prefix=/home/misha/KDE/src/toolchains/arm-none-linux-gnueabi/build/gcc-core-static --with-local-prefix=/usr/local/toolchains/arm/arm-none-linux-gnueabi//sys-root --disable-multilib --disable-libmudflap --with-sysroot=/usr/local/toolchains/arm/arm-none-linux-gnueabi//sys-root --with-newlib --enable-threads=no --disable-shared --with-pkgversion=myconfig --enable-__cxa_atexit --enable-target-optspace --disable-nls --enable-symvers=gnu --enable-languages=c
Thread model: single
gcc version 4.4.3 (myconfig)
COLLECT_GCC_OPTIONS='-c' '-v'
/home/misha/KDE/src/toolchains/arm-none-linux-gnueabi/build/gcc-core-static/libexec/gcc/arm-none-linux-gnueabi/4.4.3/cc1 -quiet -v test.c -quiet -dumpbase test.c -auxbase test -version -o /tmp/cch3dNsU.s
ignoring nonexistent directory «/usr/local/toolchains/arm/arm-none-linux-gnueabi//sys-root/usr/local/toolchains/arm/arm-none-linux-gnueabi//sys-root/include»
ignoring nonexistent directory «/home/misha/KDE/src/toolchains/arm-none-linux-gnueabi/build/gcc-core-static/lib/gcc/arm-none-linux-gnueabi/4.4.3/../../../../arm-none-linux-gnueabi/include»
#include "..." search starts here:
#include <...> search starts here:
/home/misha/KDE/src/toolchains/arm-none-linux-gnueabi/build/gcc-core-static/lib/gcc/arm-none-linux-gnueabi/4.4.3/include
/home/misha/KDE/src/toolchains/arm-none-linux-gnueabi/build/gcc-core-static/lib/gcc/arm-none-linux-gnueabi/4.4.3/include-fixed
/usr/local/toolchains/arm/arm-none-linux-gnueabi//sys-root/usr/include
End of search list.
GNU C (myconfig) version 4.4.3 (arm-none-linux-gnueabi)
compiled by GNU C version 4.5.0 20100604 [gcc-4_5-branch revision 160292], GMP version 4.3.2, MPFR version 2.4.2.
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 870ce7a45cb4ffc5b8eae580d040f0fc
COLLECT_GCC_OPTIONS='-c' '-v'
as -meabi=5 -o test.o /tmp/cch3dNsU.s
as: unrecognized option '-meabi=5'
Коей матери он вызывает host AS а не TARGET AS??? ЧЯДНТ??

попробуйте перед сборкой сделать

export AS=/usr/local/toolchains/arm/bin/arm-none-linux-gnueabi-as

ну и вообще проверьте чтобы /usr/local/toolchains/arm/bin был у вас в PATH

Sylvia ★★★★★
()

Собирать кросс компилятор самому вообще плохая идея.

Насколько я вижу таргет довольно распространённый, версия gcc тоже. Не проще ли просто поискать? На самом деле проблемы только начинаются :/

vaulter
()
Ответ на: комментарий от Sylvia

Сильви - тебе вопрос на ту же тему.

А вообще, в природе существует какая-то более адекватная система для кросссборки? А то у существующей костыль на костыле.

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

это не ко мне, у меня немного опыта с кросскомпиляцией, особенно для arm,
хотя я раньше собирала тулчейны для sparc-sunos и pa-risc hp/ux , собирала как указано в документации gcc, сейчас хоть какие-то хелпер-утилиты есть

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

>>хотя я раньше собирала тулчейны для sparc-sunos и pa-risc hp/ux

интересно зачем ?)

Тебе ж сказали: «для sparc-sunos и pa-risc hp/ux»

Led ★★★☆☆
()
Ответ на: комментарий от vaulter

Плохая идея взять готовенькое и считать себя крутым спецом. Я хочу эту бадягу научиться готовить сам без посторонней помощи, как научусь расскажу как это делается.

mskmsk1985
() автор топика
Ответ на: комментарий от mskmsk1985

> Плохая идея взять готовенькое и считать себя крутым спецом. Я хочу эту бадягу научиться готовить сам без посторонней помощи, как научусь расскажу как это делается.

а ведь говорили, что не в образовательных целях ;)

> Я хочу эту бадягу научиться готовить сам без посторонней помощи

т.е. эту тему вы создали просто чтобы мы вам посочувствовали? ;) дык сразу предупреждать надо, а то народ не поймёт и помогать начнёт… и накроется ваш хитрый план стать «крутым спецом» ;)

arsi ★★★★★
()

prefix

Таки для нормальной работы префиксы в binutils и gcc должны совпадать. Заметим что prefix-опции задают директории и по выводу это хорошо видно, делается попытка использовать поддиректории /usr/local/toolchains/arm/arm-none-linux-gnueabi. Что-нибудь типа bin, include, etc и т.п.

Что тоже хорошо видно для binutils:

/usr/local/toolchains/arm/bin/arm-none-linux-gnueabi-ar

Префикс скорее всего был /usr/local/toolchains/arm, там соответсвенно была создана директория bin и расположены target-специфичные бинарники, например, arm-none-linux-gnueabi-ar.

С указанием иного префикса для gcc делается попытка найти старые средства в новых директориях - имеем облом и попытку обращения к стандартным as и т.п с повторным обломом.

Я лично предпочитаю чтобы и binutils и gcc все были вместе и одновременно компилировались, тогда они сам друг-друга находят.

Лучше сравнить префиксы в config.status файлов build-директорий для binutils и gcc. Как временное решение можно сделать символьные линки в новой prefix-bin директории на старые binutil-овыские бинарники.

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