我在Cygwin中构建并安装了libmarpa,最终结果是/usr/local/lib/libmarpa.a。
我有一个简单的文件:
#include "libmarpa/dist/marpa.h"
int main() {
return marpa_check_version(8, 3, 0);
}但是链接器找不到marpa_check_version
$ gcc test.cc -L/usr/local/lib -lmarpa
/tmp/ccdYM1vV.o:test.cc:(.text+0x1e): undefined reference to `marpa_check_version(int, int, int)'
/tmp/ccdYM1vV.o:test.cc:(.text+0x1e): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `marpa_check_version(int, int, int)'
collect2: error: ld returned 1 exit status但符号是作为一个函数存在的:
$ nm /usr/local/lib/libmarpa.a | grep marpa_check_version
0000000000002780 T marpa_check_version这是怎么回事?在Cygwin里面做这件事有问题吗,还是我不正确地引用gcc的话?
发布于 2015-05-18 03:14:34
这个符号:
undefined reference to `marpa_check_version(int, int, int)'是C++ 残缺。这个符号不是:
0000000000002780 T marpa_check_version问题是,marpa.h开发人员没有预料到他们的代码会被C++使用,并且没有为其设置适当的保护。您可以这样解决这个问题:
extern "C" {
#include "libmarpa/dist/marpa.h"
}
int main() { ...as before ...您还应该将命令行更改为使用g++而不是gcc。与大众的看法相反,它们并不是一回事。
https://stackoverflow.com/questions/30291962
复制相似问题