#1004225 libboost-thread-dev: boost-thread fails to compile using g++

Package:
libboost-thread-dev
Source:
boost-defaults
Description:
portable C++ multi-threading (default version)
Submitter:
junyi
Date:
2022-01-23 03:39:04 UTC
Severity:
important
#1004225#5
Date:
2022-01-23 03:34:51 UTC
From:
To:
Dear Maintainer,

I was trying to compile a very basic boost-thread program. I used the following
command.

g++ --std=c++14 -pthread -lboost_thread -lboost_system -o
./boost_thread_example.out ./boost_thread_example.cpp

and the contents of the ./boost_thread_example.cpp are as follows
-------------------------------------------------------------------------
#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 << '\n';
  }
}

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

The error message are as follows.
-------------------------------------------------------------------------- /usr/bin/ld: /tmp/ccBDR6eQ.o: warning: relocation against `_ZTVN5boost6detail16thread_data_baseE' in read-only section `.text._ZN5boost6detail16thread_data_baseC2Ev[_ZN5boost6detail16thread_data_baseC5Ev]' /usr/bin/ld: /tmp/ccBDR6eQ.o: in function `boost::detail::thread_data_base::thread_data_base()': boost_thread_example.cpp:(.text._ZN5boost6detail16thread_data_baseC2Ev[_ZN5boost6detail16thread_data_baseC5Ev]+0x20): undefined reference to `vtable for boost::detail::thread_data_base' /usr/bin/ld: /tmp/ccBDR6eQ.o: in function `boost::detail::interruption_checker::interruption_checker(pthread_mutex_t*, pthread_cond_t*)': boost_thread_example.cpp:(.text._ZN5boost6detail20interruption_checkerC2EP15pthread_mutex_tP14pthread_cond_t[_ZN5boost6detail20interruption_checkerC5EP15pthread_mutex_tP14pthread_cond_t]+0x16): undefined reference to `boost::detail::get_current_thread_data()' /usr/bin/ld: /tmp/ccBDR6eQ.o: in function `boost::thread::start_thread()': boost_thread_example.cpp:(.text._ZN5boost6thread12start_threadEv[_ZN5boost6thread12start_threadEv]+0x15): undefined reference to `boost::thread::start_thread_noexcept()' /usr/bin/ld: /tmp/ccBDR6eQ.o: in function `boost::thread::~thread()': boost_thread_example.cpp:(.text._ZN5boost6threadD2Ev[_ZN5boost6threadD5Ev]+0x14): undefined reference to `boost::thread::detach()' /usr/bin/ld: /tmp/ccBDR6eQ.o: in function `boost::thread::get_id() const': boost_thread_example.cpp:(.text._ZNK5boost6thread6get_idEv[_ZNK5boost6thread6get_idEv]+0x14): undefined reference to `boost::thread::native_handle()' /usr/bin/ld: /tmp/ccBDR6eQ.o: in function `boost::thread::join()': boost_thread_example.cpp:(.text._ZN5boost6thread4joinEv[_ZN5boost6thread4joinEv]+0x69): undefined reference to `boost::thread::join_noexcept()' /usr/bin/ld: /tmp/ccBDR6eQ.o: in function `boost::condition_variable::do_wait_until(boost::unique_lock<boost::mutex>&, boost::detail::mono_platform_timepoint const&)': boost_thread_example.cpp:(.text._ZN5boost18condition_variable13do_wait_untilERNS_11unique_lockINS_5mutexEEERKNS_6detail23mono_platform_timepointE[_ZN5boost18condition_variable13do_wait_untilERNS_11unique_lockINS_5mutexEEERKNS_6detail23mono_platform_timepointE]+0x107): undefined reference to `boost::this_thread::interruption_point()' /usr/bin/ld: /tmp/ccBDR6eQ.o: in function `bool boost::condition_variable::wait_for<long, boost::ratio<1l, 1l>, bool (*)()>(boost::unique_lock<boost::mutex>&, boost::chrono::duration<long, boost::ratio<1l, 1l> > const&, bool (*)())': boost_thread_example.cpp:(.text._ZN5boost18condition_variable8wait_forIlNS_5ratioILl1ELl1EEEPFbvEEEbRNS_11unique_lockINS_5mutexEEERKNS_6chrono8durationIT_T0_EET1_[_ZN5boost18condition_variable8wait_forIlNS_5ratioILl1ELl1EEEPFbvEEEbRNS_11unique_lockINS_5mutexEEERKNS_6chrono8durationIT_T0_EET1_]+0x21): undefined reference to `boost::chrono::steady_clock::now()' /usr/bin/ld: /tmp/ccBDR6eQ.o: in function `boost::detail::thread_data<void (*)()>::~thread_data()': boost_thread_example.cpp:(.text._ZN5boost6detail11thread_dataIPFvvEED2Ev[_ZN5boost6detail11thread_dataIPFvvEED5Ev]+0x22): undefined reference to `boost::detail::thread_data_base::~thread_data_base()' /usr/bin/ld: /tmp/ccBDR6eQ.o:(.data.rel.ro._ZTIN5boost6detail11thread_dataIPFvvEEE[_ZTIN5boost6detail11thread_dataIPFvvEEE]+0x10): undefined reference to `typeinfo for boost::detail::thread_data_base' /usr/bin/ld: warning: creating DT_TEXTREL in a PIE collect2: error: ld returned 1 exit status --------------------------------------------------------------------------- My g++ version is: g++ (Debian 10.2.1-6) 10.2.1 20210110 Other boost-libraries such as asio appear to be working well. Many thanks.