Ошибки компоновщика CodeSourcery для статической библиотеки

Я создал две статические библиотеки для использования с программой C, которую я пишу для процессора ARM STM32F4xx, используя Mentor Graphics CodeSourcery. Я добавил библиотеки и их каталоги в настройки сборки в проекте, как я полагаю, они должны быть (в свойствах C/C++ Build->Settings->Tool Settings->Sourcery CodeBench C Linker->Libraries), но когда Компилирую и линкую проект, получаю неопределенные ссылки на функции в одной из библиотек. Я попытался изменить порядок библиотек относительно друг друга. Я включил ниже фрагмент журнала компилятора, отредактированный для очистки длинных имен путей.

Я в полной растерянности, поэтому любая помощь приветствуется.

'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

person Jared    schedule 04.12.2013    source источник
comment
Первое, что нужно сделать, это использовать objdump, чтобы убедиться, что эти функции предоставляются библиотеками... Затем убедитесь, что ваши переменные скрипта сборки действительно расширяются либо до некоторых флагов -l, либо явного упоминания о реальных файлах библиотеки. Если вы хотите пойти посложнее, вы можете переименовать библиотеки и убедиться, что сборка не удалась из-за невозможности их найти — если это не так, это означает, что вам не удалось сообщить компоновщику об их использовании.   -  person Chris Stratton    schedule 05.12.2013
comment
@ChrisStratton - Спасибо. Я подтвердил, что система сборки добавила библиотеки в файл libs.rsp, поэтому они также являются последней частью команды. Я сейчас проверяю символы.   -  person Jared    schedule 05.12.2013
comment
@ChrisStratton Я должен тебе один. Создайте ответ, и я приму его, если вы хотите получить кредит.   -  person Jared    schedule 05.12.2013
comment
Добро пожаловать, но поскольку я еще не знаю, в чем заключалась реальная проблема, которую вы обнаружили, возможно, вам следует просто написать свой собственный ответ с тем, что вы нашли, и тогда вы сможете (в конечном итоге) принять это, чтобы решить вопрос.   -  person Chris Stratton    schedule 05.12.2013
comment
Истинный. Оказалось, что когда я вынес некоторый общий код из проектов в библиотеку, я пропустил исходный файл, который стал очевидным при проверке символов с помощью objdump, как вы предложили. Добавление соответствующего источника и пересборка библиотеки решили проблему.   -  person Jared    schedule 05.12.2013
comment
Вы должны опубликовать это как ответ и пометить вопрос как отвеченный. Нет проблем с ответом на собственный вопрос, вы даже можете пометить свой ответ как вики сообщества, если не хотите брать за него баллы.   -  person Étienne    schedule 12.12.2013
comment
@ Этьен, ты прав. Завершенный.   -  person Jared    schedule 13.12.2013


Ответы (1)


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

person Community    schedule 12.12.2013