LINUX.ORG.RU

Подружить autotools и stm32

 ,


0

1

Установил тулчейн gcc-arm-none-eabi, написал простейший пример из одного файла main.c с пустым циклом. По привычке делаю autoscan, aclocal, autoheader, autoconf, automake --add-missing --force-missing --foreign. Содержимое служебных файлов стандартное. При выполнении ./configure --build=x86_64-linux-gnu --host=arm-none-eabi получаю сообщение об ошибке из-за невозможности слинковаться с библиотекой libc.a для этого тулчейна.

Как сие побороть?

★★★★★

Последнее исправление: LongLiveUbuntu (всего исправлений: 1)

Ответ на: комментарий от joy4eg
/usr/lib/gcc/arm-none-eabi/4.8.2/../../../arm-none-eabi/lib/libc.a(lib_a-exit.o): In function exit:/build/buildd/newlib-2.1.0/build/arm-none-eabi/newlib/libc/stdlib/../../../../../newlib/libc/stdlib/exit.c: 70: undefined reference to `_exit`
LongLiveUbuntu ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

Я бы и на qmake согласен, если бы знать, как там с кросс-компиляцией.

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

Я решил эту проблему просто - написал один универсальный Makefile с поддержкой внешнего довольно простого конфига.

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

Так и должно быть. Твой тулчен использует newlib и для него тебе нужно или самому определить вызов _exit, или указать линкеру опцию --specs=nosys.specs чтобы подключить стандартные пустые реализации системных вызовов.

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

Ну на микроконтроллере у тебя нет операционной системы. Потому libc не знает что делать когда управление вернется из main. Тебе нужно или самому написать функцию _exit с бесконечным циклом внутри или подключить одну из стандартных реализаций через параметр specs. То же самое и для других системных вызовов, например если ты хочешь чтобы malloc работал тебе понадобится написать функцию _sbrk.

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

pftBest Таки прав, добавляй --specs=nosys.specs либо реализовывай недостающие системные вызовы сам.

joy4eg ★★★★★
()

По привычке делаю autoscan, aclocal, autoheader, autoconf, automake --add-missing --force-missing --foreign

проще одной командой autoreconf -i

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

Я сам в autotools не умею, расскажи как там указать опции линкера. Надо ведь не только --specs добавить, но еще и опцию -T с линкер скриптом.

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

Я не обвиняю их, я стараюсь понять в какую переменную в Makefile.am стоит запихнуть этот -specs, потому что с прямым вызовом компилятора оно таки работает. Что самое интересное вызов CFLAGS=-specs=nosys.specs ./configure --build=... --host=... работает как надо, а если добавить hello_CFLAGS=-specs=nosys.specs в Makefile.am и вызвать autoreconf -i, всё летит к чертям при вызове ./configure.

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

Мой обычный LDFLAGS выглядит как-то так:

LDFLAGS = -g \
    -flto \
    -ffunction-sections \
    -fdata-sections \
    -mthumb \
    -march=armv7e-m \
    -mfpu=fpv4-sp-d16 \
    -mfloat-abi=hard \
    -Wl,-O1,--gc-sections \
    -Wl,-Map=$(BINDIR)/$(TARGET).map \
    -T$(LD_SCRIPT) \
    --specs=rdimon.specs
Если все это каждый раз писать в configure то в чем смысл autotools? Нужно будет писать еще один скрипт который будет правильно ./configure запускать :)

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

Если код твой для одной специфической железки, и ты никогда его на других архитектурах запускать не собираешься, тогда тебе и не надо. А так, как минимум не стоит хардкодить архитектурно-специфичные флаги типа -mthumb, -march, -mfpu, остальные можно задавать внутри Makefile.am, архитектурно-специфичные флаги можно выставлять внутри configure.ac скрипта на основе выбранного --host

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

Приложить целиком не могу, на работе плохо с интернетами.

Но он не изменился.

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

Ну если ты пишешь для МК то ты по определению не сможешь запустить весь проект под другой архитектурой. Единственное что бывает нужно это взять часть файлов и собрать их для хоста вместе с тестами. Но я не знаю как такое делается в autotools.

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

многа букаф, ниасилил :)
Что-то мне написать два Makefile проще чем переварить эту стену текста.
А если нужно будет что-либо кросс-платформенное собирать, то последую примеру llvm и возьму cmake вместо сабжа.

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

У cmake все красиво в стиле документации питона, с поиском, навигацией и примерами использования. Если понадобится, то читать там немного приятнее чем доки в стиле GNU.
Я сейчас не использую ни то ни другое, так что сравнить не могу. Но я вижу как все больше проектов выкидывают autotools и переходят на cmake, так что даже не смотря можно заранее поставить плюсик в его пользу.

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

Но я вижу как все больше проектов выкидывают autotools и переходят на cmake,

аргумент из разряда «миллионы мух не могут ошибаться»

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

Среди этих «мух» есть одна или две которым я доверяю. А еще может быть я муха, а не редкая бабочка, в таком случае выбор очевиден.

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