Я создал две статические библиотеки для использования с программой C, которую я пишу для процессора ARM STM32F4xx, используя Mentor Graphics CodeSourcery. Я добавил библиотеки и их каталоги к настройкам сборки в проекте, так как я полагаю, что они должны быть (в разделе «Свойства», «C/C++ Build-> Settings-> Tool Settings-> Sourcery CodeBench C Linker-> Libraries), но когда Я компилирую и связываю проект, я получаю неопределенные ссылочные ошибки для функций в одной из библиотек. Я попытался изменить порядок библиотек относительно друг друга. У меня есть фрагмент ниже из журнала компилятора, отредактированного для очистки имен длинного пути.Ошибки компоновщика CodeSourcery для статической библиотеки
Здесь у меня полная потеря, поэтому любая помощь оценивается.
'Building target: Firmware_Development'
'Invoking: Sourcery CodeBench C Linker'
arm-none-eabi-gcc -L"Libary1-Folder-Path" -L"Library2-Folder-Path" -Xlinker -Map="Firmware_Development.map" -T "firmware-rom-hosted.ld -mcpu=cortex-m4 -mthumb -o "Firmware_Development" "@objs.rsp" "@user_objs.rsp" "@libs.rsp"
src/main.o: In function `program_loop':
\\Debug/../src/main.c:99: undefined reference to `LwIP_Pkt_Handle'
\\Debug/../src/main.c:103: undefined reference to `LwIP_Periodic_Handle'
src/stm32f4xx_it.o: In function `__cs3_isr_exti15_10':
\\Debug/../src/stm32f4xx_it.c:187: undefined reference to `Eth_Link_ITHandler'
src/Config.o: In function `Communication_Init':
\\Debug/../Libraries_Firmware/src/Config.c:175: undefined reference to `ETH_BSP_Config'
\\Debug/../Libraries_Firmware/src/Config.c:178: undefined reference to `LwIP_Init'
collect2.exe: error: ld returned 1 exit status
cs-make: *** [Firmware_Development] Error 1
Первое, что нужно сделать, это использовать objdump для проверки того, что эти функции предоставляются библиотеками ... Затем убедитесь, что переменные скрипта сборки фактически расширяются либо до -l-флагов, либо с явным упоминанием о фактической библиотеке файлы. Если вы хотите получить более сложную задачу, вы можете переименовать библиотеки и убедиться, что сборка завершилась неудачно из-за невозможности найти их - если это не так, значит, вам не удалось сказать компоновщику, чтобы использовать их. –
@ChrisStratton - Спасибо. Я подтвердил, что система сборки добавила библиотеки в файл libs.rsp, поэтому они также являются последней частью команды. Теперь я проверяю символы. – Jared
@ChrisStratton Я вам обязан. Создайте ответ, и я приму его, если вы хотите получить кредит. – Jared