Ошибка ускорения потока: неопределенная ссылка - PullRequest
22 голосов
/ 27 августа 2010
#include <boost/thread/thread.hpp>
#include <iostream>

void hello()
{
  std::cout <<
    "Hello world, I'm a thread!"
    << std::endl;
}

int main(int argc, char* argv[])
{
  boost::thread thrd(&hello);
  thrd.join();
  return 0;
}

Я попытался скомпилировать эту программу и получил следующие ошибки:

/usr/include/boost/thread/pthread/mutex.hpp:40: undefined reference to
   `boost::thread_resource_error::thread_resource_error()'
/usr/include/boost/thread/pthread/mutex.hpp:40: undefined reference to 
   `boost::thread_resource_error::~thread_resource_error()'
/usr/include/boost/thread/pthread/mutex.hpp:40: undefined reference to 
   `typeinfo for boost::thread_resource_error'
./src/thread.o: In function `condition_variable':
/usr/include/boost/thread/pthread/condition_variable_fwd.hpp:33: 
  undefined reference to `boost::thread_resource_error::thread_resource_error()'
/usr/include/boost/thread/pthread/condition_variable_fwd.hpp:33: 
  undefined reference to `boost::thread_resource_error::~thread_resource_error()'
/usr/include/boost/thread/pthread/condition_variable_fwd.hpp:33: \
  undefined reference to `typeinfo for boost::thread_resource_error'
./src/thread.o: In function `thread_data_base':
/usr/include/boost/thread/pthread/thread_data.hpp:54: 
  undefined reference to `vtable for boost::detail::thread_data_base'
./src/thread.o: In function `thread<void (*)()>':
/usr/include/boost/thread/detail/thread.hpp:188: 
  undefined reference to `boost::thread::start_thread()'
./src/thread.o: In function `~thread_data':
/usr/include/boost/thread/detail/thread.hpp:40: 
  undefined reference to `boost::detail::thread_data_base::~thread_data_base()'
/usr/include/boost/thread/detail/thread.hpp:40: undefined reference to 
  `boost::detail::thread_data_base::~thread_data_base()'

Может кто-нибудь сказать мне, почему я получаю эту ошибку?

Ответы [ 6 ]

36 голосов
/ 07 мая 2012

компилировать с тэгом т. Е. -lboost_thread-mt

18 голосов
/ 11 февраля 2016

У меня был тот же вопрос, но -lboost_thread-mt устарел, см. этот ответ на askubuntu.com.Вместо этого, то, что вы сейчас хотите в своем make-файле (по крайней мере, для linux):

-lpthread -lboost_thread ...

Boost просто дал вам ответственность за ссылку на библиотеку потоков вашей системы.

18 голосов
/ 27 августа 2010

Многие библиотеки boost полностью реализованы в заголовочных файлах. Boost.thread нет. Похоже, что это не ссылки в библиотеке потоков Boost. Проверьте пути поиска вашего компоновщика. Или, как говорится в комментарии Stargazer712 к OP, проверьте установку. Вы должны увидеть что-то вроде libboost_thread-gcc-xxx-1_nn.o в вашей директории lib. Если это так, попробуйте ссылаться на него явно в шаге ссылки (что-то вроде -L<path_to_lib> -lboost-thread-gcc-xx-1_nn). Если нет, то у вас, очевидно, нет полной установки.

2 голосов
/ 19 января 2015

У меня была похожая проблема с centos 6.5 при компиляции povray 3.7, и это решило ее - просто добавьте -lboost_thread-mt в ваш Makefile.

0 голосов
/ 14 апреля 2019

У меня была такая же ошибка. Я исправил компиляцию с -lboost_thread

0 голосов
/ 13 октября 2011

добавить опцию компиляции

-L<path_to_lib> -lboost-thread-gcc-xx-1_nn

правильный ответ Грегга!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...