c ++链接失败,未定义引用libboost_thread

时间:2013-02-20 01:47:47

标签: c++ multithreading gcc boost linker

刚开始使用boost线程进行多线程处理;我有一个Hello World类型程序在链接到线程库期间失败。以下是终端窗口输出:

 g++ -Wall -I/usr/include HelloWorld.cpp -L/usr/local/lib -pthread -lboost_thread -lrt -lboost_system
/tmp/ccTKHnfd.o: In function `main':
HelloWorld.cpp:(.text+0x4a): undefined reference to `boost::thread::join()'
HelloWorld.cpp:(.text+0x5b): undefined reference to `boost::thread::~thread()'
HelloWorld.cpp:(.text+0x70): undefined reference to `boost::thread::~thread()'
/tmp/ccTKHnfd.o: In function `boost::thread::thread<void (*)()>(void (*)(), boost::disable_if<boost::is_convertible<void (*&)(), boost::detail::thread_move_t<void (*)()> >, boost::thread::dummy*>::type)':
HelloWorld.cpp: (.text._ZN5boost6threadC2IPFvvEEET_NS_10disable_ifINS_14is_convertibleIRS4_NS_6detail13thread_move_tIS4_EEEEPNS0_5dummyEE4typeE[_ZN5boost6threadC5IPFvvEEET_NS_10disable_ifINS_14is_convertibleIRS4_NS_6detail13thread_move_tIS4_EEEEPNS0_5dummyEE4typeE]+0x23): undefined reference to `boost::thread::start_thread()'
collect2: ld returned 1 exit status

我使用aptitude安装了boost dev库1.48并相信我正在使用编译器的所有正确标志。我错过了什么?我的gcc是4.6.3。在此先感谢您的帮助

2 个答案:

答案 0 :(得分:0)

可能你需要在lib标志后附加“-mt”后缀:例如-lboost_thread-MT 您可以仔细检查您的升级库路径。

答案 1 :(得分:0)

看起来你找不到libboost_thread.so或libboost_thread.a。 你的/ usr / local / lib实际上有什么?你可以做到

ls /usr/local/lib | grep thread。如果你没有看到libboost_thread.so或libboost_thread.a,那么这就解释了为什么你有未定义的引用 - 实现这些函数的对象实际上并不存在。

此外,如果你没有看到libboost_thread.so,但你确实看到libboost_thread.so.3.6或其他东西(表示特定版本),那么你可以做以下两件事之一:直接链接到它或创建一个符号链接(即sudo ln -s /usr/local/lib/libboost_thread.so.3.6 /usr/local/lib/libboost_thread.so