gpt4 book ai didi

c++ - 使用 Boost.Thread 编译 C++ 源文件

转载 作者:可可西里 更新时间:2023-11-01 18:19:10 31 4
gpt4 key购买 nike

我正在尝试学习如何使用 C++ Boost.Thread 库。我已经在我的 Ubuntu 11.10 系统上安装了 Boost 库。我正在关注 Schaling 的书“The Boost C++ Libraries”——特别是第 66 页的示例 6.1。我正在尝试编译以下代码示例:

#include <boost/thread.hpp>
#include <iostream>

void wait(int seconds)
{
boost::this_thread::sleep(boost::posix_time::seconds(seconds));
}

void thread()
{
for(int i = 0; i < 5; ++i)
{
wait(1);
std::cout << i << std::endl;
}
}

int main()
{
boost::thread t(thread);
t.join();
}

但是,当我从命令行使用以下命令编译它时:

$ g++ example61.cpp -o example61 -I /usr/local/include

我得到以下输出:

/tmp/cc6bVu1F.o: In function `main':
example6.cpp:(.text+0x9d): undefined reference to `boost::thread::join()'
example6.cpp:(.text+0xae): undefined reference to `boost::thread::~thread()'
example6.cpp:(.text+0xc6): undefined reference to `boost::thread::~thread()'
/tmp/cc6bVu1F.o: In function `boost::detail::thread_data_base::thread_data_base()':
example6.cpp:(.text._ZN5boost6detail16thread_data_baseC2Ev[_ZN5boost6detail16thread_data_baseC5Ev]+0x24): undefined reference to `vtable for boost::detail::thread_data_base'
/tmp/cc6bVu1F.o: In function `void boost::this_thread::sleep<boost::posix_time::seconds>(boost::posix_time::seconds const&)':
example6.cpp:(.text._ZN5boost11this_thread5sleepINS_10posix_time7secondsEEEvRKT_[void boost::this_thread::sleep<boost::posix_time::seconds>(boost::posix_time::seconds const&)]+0x35): undefined reference to `boost::this_thread::sleep(boost::posix_time::ptime const&)'
/tmp/cc6bVu1F.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)':
example6.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]+0x30): undefined reference to `boost::thread::start_thread()'
/tmp/cc6bVu1F.o: In function `boost::detail::thread_data<void (*)()>::~thread_data()':
example6.cpp:(.text._ZN5boost6detail11thread_dataIPFvvEED2Ev[_ZN5boost6detail11thread_dataIPFvvEED5Ev]+0x1f): undefined reference to `boost::detail::thread_data_base::~thread_data_base()'
/tmp/cc6bVu1F.o:(.rodata._ZTIN5boost6detail11thread_dataIPFvvEEE[typeinfo for boost::detail::thread_data<void (*)()>]+0x10): undefined reference to `typeinfo for boost::detail::thread_data_base'
collect2: ld returned 1 exit status

我不知道怎么解释。谁能帮忙?非常感谢!

最佳答案

这是一个链接错误。这意味着您的代码是正确的并且包含了正确的 header ,但编译器不会链接到 boost 线程库。要解决这个问题,您需要像这样编译:

g++ example61.cpp -o example61 -I /usr/local/include -lboost_thread

如果您已将 Boost 线程库安装到非标准路径,则还必须将其添加到搜索路径:

g++ example61.cpp -o example61 -I /usr/local/include -lboost_thread -L/usr/local/lib

关于c++ - 使用 Boost.Thread 编译 C++ 源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7934176/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com