Jordan Jelinek
Jordan Jelinek

Reputation: 156

C++ Boost Example: Creating and Managing Threads (Compilation Error)

I am currently using Boost 1.54.0. I am following the code from this 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;
}

So, it looks like all I need is the -lboost_thread, and -lboost_chrono libraries to link to at compile time. I also added the -lboost_system.

Here are my execution scripts.

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

What's going on here? This is the result.txt file:

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

I've compiled and linked other programs with the same libraries without error. So is the error in the code? This seems doubtful as the code is straight from the documentation. Any insight is appreciated.

Upvotes: 0

Views: 890

Answers (1)

Eskilade
Eskilade

Reputation: 94

I had this issue once because I was indeliberately using different versions of Boost (I had first installed Boost from commandline, then a few months later on, manually from zip).

Try adding the path to your Boost libraries to the compiler. For instance, if your libraries are stored at /usr/local/lib, try:

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

Upvotes: 1

Related Questions