2010-08-27 17 views
21
#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í trató de compilar este programa, y ​​se puso estos errores:Boost: undefined referencia

/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()' 

¿Puede alguien decirme por qué estoy recibiendo este error?

+0

Suena como impulso no está instalado correctamente en su sistema – riwalk

+0

pero mi '# include # include #include using namespace std; usando impulso de espacio de nombres; int main() {str1 \t cadena; \t cin >> str1; \t // string str1 ("hello world!"); \t to_upper (str1); \t cout << str1; return 0; } 'corre perfecta – lal

+5

lo encontré i necesidad de instalar el paquete libboost-hilo en ubuntu – lal

Respuesta

17

Muchas bibliotecas Boost se apliquen plenamente en los archivos de cabecera. 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 una referencia explícita 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.

+5

Para el registro, es -lboost_thread. Ver http://antonym.org/2009/05/threading-with-boost---part-i-creating-threads.html – JRG

+1

@Josh: gracias por la entrada. Consulte también http://www.boost.org/doc/libs/1_47_0/more/getting_started/windows.html#library-naming y http: //www.boost.org/doc/libs/1_47_0/more/getting_started/unix-variants.html # link-your-program-to-a-boost-library. – gregg

0

opción de adición de

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

compilar la respuesta de Gregg es correcto!

35

compilar con la etiqueta mt es decir -lboost_thread-mt

+2

¡Tuve un problema similar y esto lo resolvió! Gracias! –

+1

¡me salvaste el día! – ducin

+0

o '-lboost_thread-mgwXX-mt-N_NN' donde XX es su versión de mgw, por lo general solo los primeros dos (4.7.1 => 47) y Ns son su versión de refuerzo, de nuevo los primeros dos (boost_1_55_0 => 1_55), por lo el último podría verse como _____ :::::: '-lboost_thread-mgw47-mt-1_55' –

2

He tenido un problema similar con centos 6.5 al compilar povray 3.7 y esta resuelto - sólo tiene que añadir -lboost_thread-mt en su Makefile.

12

Tuve la misma pregunta, pero -lboost_thread-mt ahora está en desuso, vea this answer en askubuntu.com. En lugar de lo que ahora desea en su makefile (al menos para Linux) es:

-lpthread -lboost_thread ... 

Boost simplemente le ha dado la responsabilidad de enlazar a la biblioteca de hebras de su sistema.

Cuestiones relacionadas