【发布时间】:2016-07-12 05:17:03
【问题描述】:
我正在编译一个开源项目以在我的机器上运行,它是this project。它需要 boost 库,所以我在我的 ubuntu 机器上安装了 Boost_1_55 库,但是编译过程没有成功完成,打印出一些错误消息如下。
libtool: link: g++ -g -O3 -Wall -DKENLM_MAX_ORDER=6 -W -Wall -Wno-sign-compare -I./.. -pthread -I/usr/include -g -O2 -o .libs/query query_main.o ./.libs/libklm.so ../util/.libs/libklm_util.so -lz -L/usr/lib/x86_64-linux-gnu -lboost_program_options -lboost_thread -lboost_system -lpthread -lrt -pthread
../util/.libs/libklm_util.so: undefined reference to `boost::thread::join()'
../util/.libs/libklm_util.so: undefined reference to `boost::thread::~thread()'
./.libs/libklm.so: undefined reference to `boost::thread::start_thread()'
collect2: ld returned 1 exit status
This answer 似乎解决了我的问题,但ls -al /usr/local/lib | grep thread 的结果显示如下。
libboost_thread.a
libboost_thread.so -> libboost_thread.so.1.55.0
libboost_thread.so.1.49.0
libboost_thread.so.1.55.0
我不知道还有什么要检查的。提前感谢您的帮助。
【问题讨论】:
-
这些函数都是内联的,并在 boost headers 中定义。您的系统上似乎有多个版本的 boost 库。你也有这些库对应的头文件版本吗?
-
@n.m.你能告诉我如何检查我是否有与库对应的正确标题版本吗?其实我不太明白你的意思。标头版本应该与库匹配吗?
-
#include "boost/version.hpp" 并打印 BOOST_VERSION。
-
@n.m.我发现当前版本的 boost 是 1_49 而不是 1_55 所以你的假设是正确的。那么,如何将标头版本从 1.44 更改为 1.55?
-
我按照这些说明link 使用“BOOST_LIB_VERSION”打印标题版本。
标签: c++ boost compiler-errors linker