我正在尝试在Kubuntu 12.04中编译一个程序(不是由我编写的),它失败了以下内容:
/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 [...]
我如何修复/调试这个?
答案 0 :(得分:1)
将-v -Wl,-v
添加到标记后,我可以看到collect2
和ld
的命令行。
出于某种原因,原始Makefile
将库(-L
和-l
选项)放在大多数目标文件之前。我把库放在命令行的末尾,然后编译。