0

刚开始使用 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。在此先感谢您的帮助

4

2 回答 2

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

于 2013-03-29T22:55:52.370 回答
0

可能您需要将“-mt”后缀附加到 lib 标志:例如 -lboost_thread-mt 您可以仔细检查您的 boost 库路径。

于 2013-02-27T00:45:06.280 回答