2013-12-04 3 views
5

Я создал две статические библиотеки для использования с программой 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 
+1

Первое, что нужно сделать, это использовать objdump для проверки того, что эти функции предоставляются библиотеками ... Затем убедитесь, что переменные скрипта сборки фактически расширяются либо до -l-флагов, либо с явным упоминанием о фактической библиотеке файлы. Если вы хотите получить более сложную задачу, вы можете переименовать библиотеки и убедиться, что сборка завершилась неудачно из-за невозможности найти их - если это не так, значит, вам не удалось сказать компоновщику, чтобы использовать их. –

+0

@ChrisStratton - Спасибо. Я подтвердил, что система сборки добавила библиотеки в файл libs.rsp, поэтому они также являются последней частью команды. Теперь я проверяю символы. – Jared

+0

@ChrisStratton Я вам обязан. Создайте ответ, и я приму его, если вы хотите получить кредит. – Jared

ответ

1

Для тех, кто приехал сюда через поиски, проблема была именно такой, как предлагал @ChrisStratton. Код был первоначально создан как один проект, и я решил отделить большую часть его от библиотеки. Когда я это сделал, я узаконил заголовочный файл, но пропустил его соответствующий исходный файл, чтобы все было скомпилировано отлично, но не удалось по ссылке. Проверка objdump сделала это довольно очевидным, поскольку объекты не существовали.

Смежные вопросы