我正在尝试在TravisCI上构建一个依赖于提升的项目。当它运行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
data_parser.cpp:(.text+0x136a): undefined reference to `boost::system::generic_category()'
但我不仅在-lboost_system
命令中包含g++
,而且我也知道/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
为什么这个链接不正确?
答案 0 :(得分:2)
将目标文件放在链接器命令之后。
对象和库按顺序链接;只有在解析当前链接对象中的引用时才需要链接库代码。通过将它们放在第一位,处理它们时没有未解析的引用,因此没有代码与它们链接。