Ответ 1
скомпилировать с тегом mt i.e -lboost_thread-mt
#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()'
Может ли кто-нибудь сказать мне, почему я получаю эту ошибку?
скомпилировать с тегом mt i.e -lboost_thread-mt
Многие файлы расширения полностью реализуются в файлах заголовков. Boost.thread нет. Похоже, что это не связывание в библиотеке ускорения потоков. Проверьте пути поиска компоновщика. Или, как отмечает Stargazer712 на OP, проверьте установку. Вы должны увидеть что-то вроде libboost_thread-gcc-xxx-1_nn.o в вашем каталоге lib. Если это так, попробуйте прямо ссылаться на него на вашем этапе ссылки (что-то вроде -L<path_to_lib> -lboost-thread-gcc-xx-1_nn
). Если нет, то у вас, по-видимому, нет полной установки.
У меня был тот же вопрос, но -lboost_thread-mt теперь не рекомендуется использовать этот ответ на askubuntu.com. Вместо этого то, что вы сейчас хотите в своем make файле (по крайней мере для Linux), это:
-lpthread -lboost_thread ...
Boost просто дал вам возможность связываться с вашей библиотекой системных потоков.
У меня была аналогичная проблема с centos 6.5 при компиляции povray 3.7, и это решило ее - просто добавьте -lboost_thread-mt
в ваш Makefile
.
добавить параметр компиляции
-L<path_to_lib> -lboost-thread-gcc-xx-1_nn
gregg ответ правильный!
У меня была такая же ошибка. Я исправил это компиляцией с -lboost_thread