Я пытаюсь понять, почему я получаю undefined reference
ошибки во время связывания:найти причину ошибки `неопределенной reference`
/home/amirgon/projects/esp8266/esp-open-sdk/xtensa-lx106-elf/bin/xtensa-lx106-elf-gcc -L/home/amirgon/projects/esp8266/esp-open-sdk/sdk/lib -T/home/amirgon/projects/esp8266/esp-open-sdk/sdk/ld/eagle.app.v6.cpp.ld -nostdlib -Wl,--no-check-sections -u call_user_start -Wl,-static -Wl,--start-group -lc -lgcc -lhal -lphy -lpp -lnet80211 -llwip -lwpa -lmain build/app_app.a -Wl,--end-group -o build/app.out
build/app_app.a(routines.o):(.text+0x4): undefined reference to `pvPortMalloc(unsigned int, char const*, int)'
GCC жалуется, что не может найти функцию pvPortMalloc
.
Однако, Я могу подтвердить эту функцию в libmain.a
!
В командной строке выше ссылка на libmain ссылается на -lmain
, а путь к библиотеке - -L/home/amirgon/projects/esp8266/esp-open-sdk/sdk/lib
. Когда я дамп символов из libmain.a
на этом пути я могу найти pvPortMalloc
помечена как T
, что означает, что символ находится в разделе текста (кода):
/home/amirgon/projects/esp8266/esp-open-sdk/xtensa-lx106-elf/bin/xtensa-lx106-elf-nm -g /home/amirgon/projects/esp8266/esp-open-sdk/sdk/lib/libmain.a | grep pvPortMalloc
U pvPortMalloc
0000014c T pvPortMalloc
U pvPortMalloc
Так, я что-то пропустил? Что может быть причиной того, что gcc не находит функцию, хотя она существует в libmain.a?
Как я могу отладить эту ошибку?
Нужно получить ваши библиотеки после ваших файлов .o на линии ссылок, я полагаю. Заказ имеет важное значение при связывании. –
@FredLarson Не было бы исправлено '--start-group' /' -end-group'?он должен разрешать символы итеративно, пока не будут разрешены все символы. –
Я думаю, что работает только для файлов .a, а не для файлов .o. –