科研需要,搞一个MASCOT的api用。从官网上下载后,按照教程输入命令:
g++ -m64 -D__LINUX64__ -I../include resfile_peptidesum.cpp -L../lib -lmsparser
ahh!报了一大堆链接错误:
resfile_peptidesum.cpp:(.text+0x1a0): undefined reference to `matrix_science::ms_mascotresfile::getLastErrorString[abi:cxx11]() const'
resfile_peptidesum.cpp:(.text+0x1fb): undefined reference to `matrix_science::ms_mascotresfile::getLastErrorString[abi:cxx11]() const'
...
对于这种事情,度娘显然是没啥大用。先问问谷哥说啥吧(谷哥:“未找到相关内容”)
看来关键词选得有些问题。这里面最不熟悉的就是ABI了,来搜一下它是什么东东:
谷歌告诉我们在stackoverflow可以找到gnu 5 关于c++ ABI相关的内容,以及如何解决错误的方法。
加入编译选项
-D_GLIBCXX_USE_CXX11_ABI=0
原因是c++ string在c++11中与原有的编译方式接口名称有不同。而g++ 5以上版本默认采用C++11ABI接口,这就造成link找不到的问题了。