LINUX.ORG.RU

Как собрать кросскомпилятор?

 , , , ,


0

1

Собственно вопрос. Мне нужен кросскомпилятор arm-linux-gnueabi под протухший Debian Stretch на target. Версия glibc-2.24. Я пытался это сделать через crossdev на Calculate Linux - при выборе нужной версии libc компиляция падает на этапе сборки libc. Попробовал crosstool-ng(правда на Arch, как появится возможность, попробую на Calculate) - получил зависание сборки на этапе опять таки libc(сборка просто зависает со стопроцентной загрузкой ЦП, судя по логам, оно пытается что-то копировать). clang тоже устроит, если будет работать. Версия мне gcc не важна, главное, чтобы libc был 2.24. Варианты с докером не интересуют. Если подскажете, как это собрать из официальных архивов с исходниками вручную - тоже буду благодарен.

★★☆

Последнее исправление: Werenter (всего исправлений: 1)
Ответ на: комментарий от t184256
[ALL  ]      arm-unknown-linux-gnueabi-gcc  -g -O2 -fcommon -U_FORTIFY_SOURCE        -msoft-float    cxa_thread_atexit_impl.c -c -std=gnu11 -fgnu89-inline  -Wall -Wundef -Wwrite-strings -fmerge-all-constants -frounding-math -Wstrict-prototypes -Wold-style-definition   -fPIC   -ftls-model=initial-exec      -I../include -I/home/alex/Universal/crosscompiler/.build/arm-unknown-linux-gnueabi/build/build-libc/multilib/stdlib  -I/home/alex/Universal/crosscompiler/.build/arm-unknown-linux-gnueabi/build/build-libc/multilib  -I../sysdeps/unix/sysv/linux/arm  -I../sysdeps/arm/nptl  -I../sysdeps/unix/sysv/linux/include -I../sysdeps/unix/sysv/linux  -I../sysdeps/nptl  -I../sysdeps/pthread  -I../sysdeps/gnu  -I../sysdeps/unix/inet  -I../sysdeps/unix/sysv  -I../sysdeps/unix/arm  -I../sysdeps/unix  -I../sysdeps/posix  -I../sysdeps/arm/include -I../sysdeps/arm  -I../sysdeps/wordsize-32  -I../sysdeps/ieee754/flt-32  -I../sysdeps/ieee754/dbl-64  -I../sysdeps/ieee754  -I../sysdeps/generic  -I.. -I../libio -I. -nostdinc -isystem /home/alex/Universal/crosscompiler/.build/arm-unknown-linux-gnueabi/buildtools/lib/gcc/arm-unknown-linux-gnueabi/6.5.0/include -isystem /home/alex/Universal/crosscompiler/.build/arm-unknown-linux-gnueabi/buildtools/lib/gcc/arm-unknown-linux-gnueabi/6.5.0/include-fixed -isystem /home/alex/x-tools/arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi/sysroot/usr/include -D_LIBC_REENTRANT -include /home/alex/Universal/crosscompiler/.build/arm-unknown-linux-gnueabi/build/build-libc/multilib/libc-modules.h -DMODULE_NAME=rtld -include ../include/libc-symbols.h  -DPIC -DSHARED     -o /home/alex/Universal/crosscompiler/.build/arm-unknown-linux-gnueabi/build/build-libc/multilib/stdlib/rtld-cxa_thread_atexit_impl.os -MD -MP -MF /home/alex/Universal/crosscompiler/.build/arm-unknown-linux-gnueabi/build/build-libc/multilib/stdlib/rtld-cxa_thread_atexit_impl.os.dt -MT /home/alex/Universal/crosscompiler/.build/arm-unknown-linux-gnueabi/build/build-libc/multilib/stdlib/rtld-cxa_thread_atexit_impl.os  
[ALL  ]      make[5]: Leaving directory '/home/alex/Universal/crosscompiler/.build/src/glibc-2.24/stdlib'

Вот так оканчивается лог сборки crossdev-ng. После этого процесс намертво зависает, пока не нажмешь Ctrl-c. Для эксперимента пробовал другие версии gcc и libc - результат одинаковый.

После SIGINT выводит это:

[ERROR]  >>
[ERROR]  >>  Build failed in step 'Building for multilib 1/1: '''
[ERROR]  >>        called in step 'Installing C library'
[ERROR]  >>        called in step '(top-level)'
[ERROR]  >>
[ERROR]  >>  Error happened in: CT_DoExecLog[scripts/functions@376]
[ERROR]  >>        called from: glibc_backend_once[scripts/build/libc/glibc.sh@274]
[ERROR]  >>        called from: CT_IterateMultilibs[scripts/functions@1608]
[ERROR]  >>        called from: glibc_main[scripts/build/libc/glibc.sh@40]
[ERROR]  >>        called from: do_libc_main[scripts/build/libc.sh@33]
[ERROR]  >>        called from: main[scripts/crosstool-NG.sh@697]
Werenter ★★☆
() автор топика
Ответ на: комментарий от t184256

pstree(нужная часть):

        ├─xfce4-terminal─┬─zsh───ct-ng───bash───bash───bash─┬─bash─┬─bash───cat
        │                │                                  │      └─bash
        │                │                                  └─make───make───make───make───2*[make]
        │                └─3*[{xfce4-terminal}]

iotop и strace не установлены. В btop если посомтреть инфо о процессе, есть IO операции.

Считаю зависшим на основании того, что на стандартном выводе ничего нет, а состояние не меняется, даже если подождать (час точно был). Процессор загружен на 100%. Процессов компилятора нет, только make.

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

Не спец по данной тематике, но судя по по «[ALL ] ..........» у тебя начинается стадия линковки. Если у тебя не SSD и/или недостаточно современный процессор - то процесс будет долгий. Если много оперативки(реально много, т.е. хотя бы 200% от размера хранящегося в каталоге сборки), можешь перенести каталог сборки в оперативку. Должно быть быстрее.

Atlant ★★★★★
()

Можешь скачать linaro компилятор и sysroot: https://releases.linaro.org/components/toolchain/binaries/

У меня есть один старый проект, даже еще древнее - я им собираю.

gcc 4.9 идет libc-2.19, значит тебе надо что то посвежее. Там вроде нет 2.24, но есть 2.23 и 2.25 - может сгодится.

guskov_roman
()
Ответ на: комментарий от Werenter

Ну это не тривиальная задача на самом деле. Придется заморочиться

У тебя есть несколько вариантов.

  1. Поставить debian stretch на виртуалку и установить все нужные компиляторы или библотеки
  2. С помощью Linaro компилятора и buildroot или elbe собрать rootfs с подходящей версией libc и уже потом собрать проект с этой rootfs

Ссылки: buildroot elbe

Ну или как вариант собрать прямо на таргете.

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

Прямо на таргете не выйдет, там нет интернета, чтобы скачать компилятор, да и медленно это будет слишком. Поэтому интересуюсь сборкой кросскомпилятора, но linaro тулчейн попробую. Сам кросскомилятор мне не так важен, его собрать у меня вполне удаётся. Вся мякотка именно в sysroot.

Werenter ★★☆
() автор топика

Короче получилось все через crossdev. Для этого нужно было подключить оверлей argent-main, и тогда все отлично собирается.

Werenter ★★☆
() автор топика