2013-07-01 4 views
1

Я пытаюсь скомпилировать программу (не написанную мной) в Kubuntu 12.04 и он терпит неудачу со следующим:Linker не хочет использовать libexpat.so (неопределенный символ)

/usr/bin/ld: /usr/lib/x86_64-linux-gnu/libwx_baseu_xml-2.8.so: undefined reference to symbol 'XML_SetUserData' 
/usr/bin/ld: note: 'XML_SetUserData' is defined in DSO /usr/lib/x86_64-linux-gnu/libexpat.so so try adding it to the linker command line 
/usr/lib/x86_64-linux-gnu/libexpat.so: could not read symbols: Invalid operation 
collect2: ld returned 1 exit status 

Я пофиксить пара ошибок в Makefile, но я до сих пор не понимаю, что проблема здесь, как командная строка действительно включает -lexpat, и, видимо, в правильном месте:

g++ [...] -L/usr/lib/x86_64-linux-gnu [...] -lwx_baseu_xml-2.8 [...] -lm -lexpat [...] 

Как я могу исправить/отладки это?

ответ

1

Добавление -v -Wl,-v к флагам позволило мне увидеть командные строки для collect2 и ld.

По какой-то причине оригинал Makefile помещал библиотеки (-L и -l) перед большинством объектных файлов. Я поместил библиотеки в конец командной строки и теперь компилируется.