【问题标题】:boost::thread undefined referenceboost::thread 未定义引用
【发布时间】:2011-07-01 01:23:55
【问题描述】:

我刚刚安装了 boost 库,我正在尝试使用多线程。我完全从 boost 库示例中复制了这个示例。我收到错误消息:

undefined reference boost::thread::join()

这是代码,

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

struct thread_alarm
{
    thread_alarm(int secs) : m_secs(secs) { }
    void operator()()
    {
        boost::xtime xt;
        boost::xtime_get(&xt, boost::TIME_UTC);
        xt.sec += m_secs;

        boost::thread::sleep(xt);

        std::cout << "alarm sounded..." << std::endl;
    }

    int m_secs;
};

int main(int argc, char* argv[])
{
    int secs = 5;
    std::cout << "setting alarm for 5 seconds..." << std::endl;
    thread_alarm alarm(secs);
    boost::thread thrd(alarm);
    thrd.join();
}

【问题讨论】:

  • 您的错误消息的开头是否显示“ld”?听起来您只是还没有构建 Boost。 (我相信boost::thread 是需要首先构建的库之一)。或者,使用 std::thread 代替,因为 GCC 支持 C++0x 功能 IIRC。
  • 线程不是std的成员
  • 并且没有构建提升,我认为可能是一个问题。但是@boost.org/doc/libs/1_46_1/more/getting_started/… 它说必须构建线程,然后在下一页boost.org/doc/libs/1_46_1/doc/html/thread.html 它说我只需要包含主头文件。所以我不知道该怎么办。
  • 在 C++0x 中,线程 std 的成员。 (您可能需要指定 --std=c++0x 才能在 G++ 中获取它)

标签: c++ ubuntu boost-thread


【解决方案1】:

哪个编译器?

如果是 gcc 试试这个

$ g++ -o ./app.out ./source.cpp -lboost_thread

如果你在 Windows 上运行,也许你必须确保你已经安装了 pthread,你还必须告诉编译器在哪里以及如何将它们链接在一起,你的应用程序和 3rd 方库,例如@987654322 @。

希望对你有用

【讨论】:

    【解决方案2】:

    在我的 Fedora Core 16 下,链接所需的 boost lib 是“boost_thread-mt”(将“-lboost_thread-mt”添加到您的链接器鸡尾酒中。

    【讨论】: