r44083 0 21 сентября, 2015 Опубликовано 21 сентября, 2015 (изменено) · Жалоба Использую 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 Изменено 21 сентября, 2015 пользователем r44083 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 1 21 сентября, 2015 Опубликовано 21 сентября, 2015 · Жалоба Забавно. А зачем использовать эти функции? Что, например, должно произойти, когда в теле какой-нибудь функции будет вызван exit()? Если нужно перезагрузить МК, то запустите, например, watchdog или еще каким-нибудь образом в функции _exit() выполняйте reset (скажем, какую-нибудь GPIO подключить ко входу RESET). С функцией kill тоже веселуха: у вас же не RTOS! Зачем здесь сигналы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 21 сентября, 2015 Опубликовано 21 сентября, 2015 · Жалоба а когда в main() пытаюсь использовать какую-нибудь функцию из этих библиотек, то в лог построения проекта попадает вот такая ошибка: Небось, виртуальные деструкторы используете? :) Решение вот тут: ссылка. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
r44083 0 21 сентября, 2015 Опубликовано 21 сентября, 2015 · Жалоба Небось, виртуальные деструкторы используете? :) Решение вот тут: ссылка. Виртуальные функции я не использую, это очень простые обычные библиотеки. Я подключил, ваш файл к проекту и ситуация немного изменилась. Теперь возникает другая ошибка при линковке: 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 14 21 сентября, 2015 Опубликовано 21 сентября, 2015 · Жалоба Да, я уже глянул. Верните ключи -fno-exceptions и -fno-rtti. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
r44083 0 21 сентября, 2015 Опубликовано 21 сентября, 2015 · Жалоба Да, я уже глянул. Верните ключи -fno-exceptions и -fno-rtti. Вернул эти флаги и проект построился. Просто замечательно. Было выявлено, что к вышеописанной ситуации приводило отсутствие флага "-fno-exceptions". Пока на работе просто скомпилировал, но на микроконтроллере не проверял. Приду домой и проверю, также почитаю как именно он влиял на сборку и приводил к такой ошибке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться