Ошибки связывания при компиляции с использованием компилятора Microchip C30 для Openpicus

#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'
undefined reference to
object_read’ неопределенная ссылка на object_create'
undefined reference to
object_isInstanceNew’ неопределенная ссылка на object_create'
undefined reference to
object_write’ неопределенная ссылка на object_execute'
undefined reference to
object_write’ неопределенная ссылка на object_delete'
undefined reference to
prv_getRegisterPayload’ P.S. это не предупреждения!!

Ошибка указывает на то, что нет определения функций «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
}