我正在尝试在 TravisCI 上构建一个依赖于 boost 的项目。当它运行时 the g++
command :
g++ -Wall -L/usr/lib -fopenmp -lboost_system -lboost_filesystem -o bin/test obj/data_parser.o obj/hmm.o obj/test.o
它得到 this linking error :
data_parser.cpp:(.text+0x136a): undefined reference to `boost::system::generic_category()'
但我不仅在 g++
命令中包含了 -lboost_system
,我还知道 /usr/lib/libboost_system.so
exists .
这是在带有 g++ 4.6.3 的 Ubuntu/Linaro 4.6.3-1ubuntu5 系统上。我安装了 boost 库:
sudo apt-get install libboost-dev libboost-filesystem1.46-dev libboost-iostreams1.46-dev libboost-system1.46-dev
为什么这个链接不正确?
最佳答案
在链接器命令中将库放在目标文件之后。
对象和库按顺序链接;和库代码仅在需要解析当前链接对象中的引用时才链接。通过将它们放在首位,在处理它们时没有未解析的引用,因此没有代码从它们链接。
关于c++ - 即使我包含库,也会发生 Boost 链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23298896/