C ++ Boost示例:创建和管理线程(编译错误)

时间:2017-06-30 07:20:58

标签: c++ boost boost-thread

我目前正在使用Boost 1.54.0。我正在关注此example的代码。

example_44_01.cpp

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

void wait(int seconds)
{
  boost::this_thread::sleep_for(boost::chrono::seconds{seconds});
}

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

int main(int argc, char** argv)
{
  boost::thread t{thread};
  t.join();
  return 0;
}

因此,看起来我需要的是-lboost_thread和-lboost_chrono库,以便在编译时链接到。我还添加了-lboost_system。

这是我的执行脚本。

g++-7 -Wall -std=c++1z -g -c example_44_01.cpp -o example_44_01.o
g++-7 -Wall -std=c++1z -g example_44_01.o -o example_44_01 -lboost_system -lboost_thread -lboost_chrono &>result.txt

这里发生了什么?这是result.txt文件:

example_44_01.o: In function `boost::this_thread::sleep_for(boost::chrono::duration<long, boost::ratio<1l, 1000000000l> > const&)':
/usr/local/include/boost/thread/pthread/thread_data.hpp:243: undefined reference to `boost::this_thread::hidden::sleep_for(timespec const&)'
collect2: error: ld returned 1 exit status

我已经使用相同的库编译和链接其他程序而没有错误。那么代码中的错误是什么?这似乎令人怀疑,因为代码直接来自文档。任何见解都表示赞赏。

1 个答案:

答案 0 :(得分:1)

我曾经遇到过这个问题,因为我无意中使用了不同版本的Boost(我先从命令行安装了Boost,然后几个月后,从zip手动安装)。

尝试将Boost库的路径添加到编译器。例如,如果您的库存储在/usr/local/lib,请尝试:

g++-7 -Wall -std=c++1z -g example_44_01.o -o example_44_01 -L/usr/local/lib -lboost_system -lboost_thread -lboost_chrono &>result.txt