未定义参考,尽管.so中存在符号

时间:2018-08-01 10:02:35

标签: c++ linker ld undefined-reference root-framework

免责声明:我知道类似的问题 thisthis 但是没有什么可以帮助我解决问题。

我正在尝试编译一个依赖于ROOT包的较大项目,并且能够以最小的示例重现我所面临的错误:

test.cpp:

#include "Math/GenVector/GenVector_exception.h"
int main()
{
  ROOT::Math::GenVector::Throw("foo");
}

编译为:g++ -lGenVector test.cpp给出:

/tmp/ccq9A45m.o: In function `main':
test.cpp:(.text+0xc): undefined reference to `ROOT::Math::GenVector::Throw(char const*)'
collect2: error: ld returned 1 exit status

使用ld --verbose -lGenVector | grep "lib GenVector.so succeeded"对libGenVector.so进行本地化将给出:

attempt to open //usr/local/lib/libGenVector.so succeeded

检查符号是否在库中定义 nm -DgC --defined-only /usr/local/lib/libGenVector.so| grep Throw给出:

000000000003f180 T ROOT::Math::Throw(ROOT::Math::GenVector_exception&)
000000000003f1e0 T ROOT::Math::GenVector::Throw(char const*)

基于对this question的回答,我还尝试使用-std=c++11-std=c++14-std=c++17进行编译,但是所有内容都给出了相同的错误消息。

0 个答案:

没有答案