Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Во время линковки для STM32F100RB возникает непонятная ошибка
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
r44083
Использую 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() пытаюсь использовать какую-нибудь функцию из этих библиотек, то в лог построения проекта попадает вот такая ошибка:

CODE

--- 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
Эдди
Забавно. А зачем использовать эти функции? Что, например, должно произойти, когда в теле какой-нибудь функции будет вызван exit()?
Если нужно перезагрузить МК, то запустите, например, watchdog или еще каким-нибудь образом в функции _exit() выполняйте reset (скажем, какую-нибудь GPIO подключить ко входу RESET).
С функцией kill тоже веселуха: у вас же не RTOS! Зачем здесь сигналы?
AHTOXA
Цитата(r44083 @ Sep 21 2015, 10:06) *
а когда в main() пытаюсь использовать какую-нибудь функцию из этих библиотек, то в лог построения проекта попадает вот такая ошибка:

Небось, виртуальные деструкторы используете? sm.gif
Решение вот тут: ссылка.
r44083
Цитата(AHTOXA @ Sep 21 2015, 09:26) *
Небось, виртуальные деструкторы используете? sm.gif
Решение вот тут: ссылка.

Виртуальные функции я не использую, это очень простые обычные библиотеки.
Я подключил, ваш файл к проекту и ситуация немного изменилась. Теперь возникает другая ошибка при линковке:
Код
c-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 `_getpidmakefile:252: recipe for target '.\out\hex\ARM-testENC28J60.elf' failed
'
collect2.exe: error: ld returned 1 exit status
make[1]: *** [.\out\hex\ARM-testENC28J60.elf] Error 1
make: *** [all] Error 2
AHTOXA
Да, я уже глянул.
Верните ключи -fno-exceptions и -fno-rtti.
r44083
Цитата(AHTOXA @ Sep 21 2015, 15:02) *
Да, я уже глянул.
Верните ключи -fno-exceptions и -fno-rtti.

Вернул эти флаги и проект построился. Просто замечательно.
Было выявлено, что к вышеописанной ситуации приводило отсутствие флага "-fno-exceptions".
Пока на работе просто скомпилировал, но на микроконтроллере не проверял. Приду домой и проверю, также почитаю как именно он влиял на сборку и приводил к такой ошибке.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2018 Invision Power Services, Inc.