LINUX.ORG.RU

Во время линковки для STM32F100RB возникает непонятная ошибка

 , , , ,


0

1

Использую arm-none-eabi-, make, clang, Sublime Text. До недавнего времени проект нормально собирался, но вот я решил добавить в него свою библиотеку (файлы init.cpp, init.h, spi.cpp, spi.h). Положил эти 4 файла в папку user-code в проекте, эта папка прописана в makefile для флага -I, а также для создания объектных файлов. Самое интересное, когда я просто подключаю в главном файле (#include «init.h» #include «spi.h»), то проект нормально собирается, а когда в main() пытаюсь использовать какую-нибудь функцию из этих библиотек, то в лог построения проекта попадает вот такая ошибка:

--- linking...
arm-none-eabi-gcc .\out\obj/system_stm32f10x.o .\out\obj/core_cm3.o .\out\obj/stm32f10x_exti.o .\out\obj/stm32f10x_gpio.o .\out\obj/stm32f10x_spi.o .\out\obj/misc.o .\out\obj/stm32f10x_rcc.o .\out\obj/main.o .\out\obj/spi.o .\out\obj/init.o .\out\obj/startup_stm32f10x_md_vl.o -mcpu=cortex-m3 -mthumb -Wl,-Map=".\out\lst\ARM-testENC28J60.map",--cref -Wl,--gc-sections -TSTM32F10X_MD_VL.ld -nostartfiles -o .\out\hex\ARM-testENC28J60.elf
c:/program files (x86)/gnu tools arm embedded/bin/../lib/gcc/arm-none-eabi/4.9.3/armv7-m\libgcc.a(unwind-arm.o): In function `get_eit_entry':
unwind-arm.c:(.text+0x154): undefined reference to `__exidx_start'
unwind-arm.c:(.text+0x158): undefined reference to `__exidx_end'
c:/program files (x86)/gnu tools arm embedded/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7-m\libc.a(lib_a-abort.o): In function `abort':
abort.c:(.text.abort+0xa): undefined reference to `_exit'
c:/program files (x86)/gnu tools arm embedded/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7-m\libc.a(lib_a-signalr.o): In function `_kill_r':
signalr.c:(.text._kill_r+0xe): undefined reference to `_kill'
c:/program files (x86)/gnu tools arm embedded/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7-m\libc.a(lib_a-signalr.o): In function `_getpid_r':
signalr.c:(.text._getpid_r+0x0): undefined reference to `_getpid'
collect2.exe: error: ld returned 1 exit status
make[1]: *** [.\out\hex\ARM-testENC28J60.elf] Error 1
makefile:252: recipe for target '.\out\hex\ARM-testENC28J60.elf' failed
make[1]: Leaving directory 'D:/4 electronics/soft/Sublime Text projects/ARM-testENC28J60'
makefile:203: recipe for target 'all' failed
make: *** [all] Error 2
[Finished in 1.8s with exit code 2]

Микроконтроллер - STM32F100RB.

Сборка SublimeText (портабельная, со всеми программами) лежит тут: https://copy.com/kJIDxc8rIJenEWm4

Как преодолеть такую ошибку?

Весь проект лежит на гитхаб тут: https://github.com/r44083/ARM-testENC28J60

На элхе уже писал, отпишусь и здесь: явно используются функции, которым не место в мелкоконтроллерах!

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

P.S. Но если без велосипедов никак, то просто делаются пустые заглушки на библиотечные функции (по аналогии со всякими _brk и т.п. при использовании функций stdlib).

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

решено

Проблема решена, нужно было добавить флаг -fno-exceptions в опции компилятора.

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