#c #compiler-errors #linker-errors #dynamic-linking #microchip
#c #ошибки компилятора #компоновщик-ошибки #динамическое связывание #microchip
Вопрос:
Я собираю проект с большим количеством внешних библиотек. В проекте есть некоторые предупреждения, но я считаю, что это не должно препятствовать созданию шестнадцатеричного файла. Поэтому, когда я компилирую проект, я получаю список ошибок компоновки.
Compiling C:liblwm2mLibsExternalLibheap.s
* Total program memory used (bytes): 0x28ef3 (167667) 64%
* Total data memory used (bytes): 0x360a (13834) 84%
x_object_device.o(.text 0x688):C:liblwm2mLibsExternalLibobject_device.c: undefined reference to `strdup'
x_object_device.o(.text 0x68a):C:liblwm2mLibsExternalLibobject_device.c: undefined reference to `strdup'
x_object_device.o(.text 0x6b6):C:liblwm2mLibsExternalLibobject_device.c: undefined reference to `strdup'
x_object_device.o(.text 0x6b8):C:liblwm2mLibsExternalLibobject_device.c: undefined reference to `strdup'
x_object_device.o(.text 0x6e4):C:liblwm2mLibsExternalLibobject_device.c: undefined reference to `strdup'
x_object_device.o(.text 0x6e6):C:liblwm2mLibsExternalLibobject_device.c: more undefined references to `strdup' follow
x_observe.o(.text 0x3c2):C:liblwm2mLibsExternalLibobserve.c: undefined reference to `object_read'
x_observe.o(.text 0x3c4):C:liblwm2mLibsExternalLibobserve.c: undefined reference to `object_read'
x_liblwm2m.o(.text 0x86):C:liblwm2mLibsExternalLibliblwm2m.c: undefined reference to `strdup'
x_liblwm2m.o(.text 0x88):C:liblwm2mLibsExternalLibliblwm2m.c: undefined reference to `strdup'
x_management.o(.text 0x48):C:liblwm2mLibsExternalLibmanagement.c: undefined reference to `object_read'
x_management.o(.text 0x4a):C:liblwm2mLibsExternalLibmanagement.c: undefined reference to `object_read'
x_management.o(.text 0xa6):C:liblwm2mLibsExternalLibmanagement.c: undefined reference to `object_create'
x_management.o(.text 0xa8):C:liblwm2mLibsExternalLibmanagement.c: undefined reference to `object_create'
x_management.o(.text 0x154):C:liblwm2mLibsExternalLibmanagement.c: undefined reference to `object_isInstanceNew'
x_management.o(.text 0x156):C:liblwm2mLibsExternalLibmanagement.c: undefined reference to `object_isInstanceNew'
x_management.o(.text 0x16e):C:liblwm2mLibsExternalLibmanagement.c: undefined reference to `object_create'
x_management.o(.text 0x170):C:liblwm2mLibsExternalLibmanagement.c: undefined reference to `object_create'
x_management.o(.text 0x188):C:liblwm2mLibsExternalLibmanagement.c: undefined reference to `object_write'
x_management.o(.text 0x18a):C:liblwm2mLibsExternalLibmanagement.c: undefined reference to `object_write'
x_management.o(.text 0x1a2):C:liblwm2mLibsExternalLibmanagement.c: undefined reference to `object_execute'
x_management.o(.text 0x1a4):C:liblwm2mLibsExternalLibmanagement.c: undefined reference to `object_execute'
x_management.o(.text 0x1da):C:liblwm2mLibsExternalLibmanagement.c: undefined reference to `object_write'
x_management.o(.text 0x1dc):C:liblwm2mLibsExternalLibmanagement.c: undefined reference to `object_write'
x_management.o(.text 0x208):C:liblwm2mLibsExternalLibmanagement.c: undefined reference to `object_delete'
x_management.o(.text 0x20a):C:liblwm2mLibsExternalLibmanagement.c: undefined reference to `object_delete'
x_registration.o(.text 0x8c):C:liblwm2mLibsExternalLibregistration.c: undefined reference to `prv_getRegisterPayload'
x_registration.o(.text 0x8e):C:liblwm2mLibsExternalLibregistration.c: undefined reference to `prv_getRegisterPayload'
C:Program FilesMicrochipMPLAB C30binbin/pic30-coff-bin2hex.exe: a.cof could not be opened.
The system cannot find the file specified.
---------------------------------- COMPILING ERROR ---------------------------------------
Здесь есть функция strdup, которая поддерживается openpicus, и я также объявил ее. Что меня удивляет, так это то, что программа компилируется правильно, но выдает ошибки компоновки. Есть мысли по этому поводу?
Заранее спасибо
Ответ №1:
Это ошибки в коде неопределенная ссылка на strdup'
object_read’ неопределенная ссылка на
undefined reference to object_create'
object_isInstanceNew’ неопределенная ссылка на
undefined reference to object_create'
object_write’ неопределенная ссылка на
undefined reference to object_execute'
object_write’ неопределенная ссылка на
undefined reference to object_delete'
prv_getRegisterPayload’ P.S. это не предупреждения!!
undefined reference to
Ошибка указывает на то, что нет определения функций «strdup», …, «prv_getRegisterPayload». Компоновщик не находит ссылки на эти процедуры и завершается с ошибкой времени компоновки. Отсутствие связывания означает, что шестнадцатеричный файл не создается, это стандартное поведение всех цепочек инструментов.
Проверьте библиотеки, которые вы подключили к проекту. Добавьте библиотеки, в которых есть ссылки / определения для этих подпрограмм, и код должен быть собран нормально.
Псевдокод, который приведет к подобной ошибке, выглядит как:
extern void parabola ();
int main(void)
{
parabola (); // ERROR here "undefined reference to `parabola'
}
— Где определение функции parabola? Не должно ли это быть
void parabola ()
{}
int main(void)
{
parabola (); // Builds like magic
}