免责声明:我知道类似的问题 this 和this 但是没有什么可以帮助我解决问题。
我正在尝试编译一个依赖于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
进行编译,但是所有内容都给出了相同的错误消息。