c++ - para - Boost thread error: referencia no definida
boost:: (5)
#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;
}
Corrí intentado compilar este programa, y obtuve estos errores:
/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()''
¿Alguien puede decirme por qué estoy recibiendo este error?
Muchas bibliotecas de impulso están completamente implementadas en archivos de encabezado. Boost.thread no lo es. Parece que no está enlazando en la biblioteca de subprocesos. Verifica tus rutas de búsqueda de enlazadores. O, como dice el comentario de Stargazer712 sobre el OP, verifique la instalación. Debería ver algo como libboost_thread-gcc-xxx-1_nn.o en su directorio lib. Si es así, intente hacer referencia explícitamente en su paso de enlace (algo así como -L<path_to_lib> -lboost-thread-gcc-xx-1_nn
). Si no, entonces aparentemente no tienes una instalación completa.
Tenía la misma pregunta, pero -lboost_thread-mt ahora está en desuso, mira esta respuesta en askubuntu.com. En cambio, lo que ahora quiere en su archivo MAKE (al menos para Linux) es:
-lpthread -lboost_thread ...
Boost simplemente le ha dado la responsabilidad de vincular a la biblioteca de hilos de su sistema.
Tuve un problema similar con centos 6.5 al compilar povray 3.7 y esto lo resolvió: simplemente agregue -lboost_thread-mt
en su Makefile
.
agregar la opción de compilación
-L<path_to_lib> -lboost-thread-gcc-xx-1_nn
¡La respuesta de Gregor es correcta!
compila con mt tag ie -lboost_thread-mt