科研需要,搞一个MASCOT的api用。从官网上下载后,按照教程输入命令:
g++ -m64 -D__LINUX64__ -I../include resfile_peptidesum.cpp -L../lib -lmsparserahh!报了一大堆链接错误:
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找不到的问题了。
本文介绍了解决使用MASCOT API时遇到的链接错误问题。错误源于C++11 ABI与旧版本间的不兼容导致的链接失败。通过添加编译选项-D_GLIBCXX_USE_CXX11_ABI=0解决了这一问题。
1821

被折叠的 条评论
为什么被折叠?



