2011-03-22 14 views
5

Trabajo en eclipse bajo Linux UBUNTU :) 10.10, instalé los paquetes boost-dev 1.40 usando el administrador de pkg Synaptic. Soy nuevo en Linux y este paquete de impulso. Intento crear un nuevo proyecto y escribir:no compila si incluye boost/thread en Linux Ubuntu:) 10.10

#include <boost/thread.hpp> 
int main(int argc, char* argv[]){ 
} 

No incluí nada ni escribí nada como pthread en ningún lado. cuando se trata de construir, que dice:

/usr/include/boost/config/requires_threads.hpp:47: error: #error "Compiler threading support is not turned on. Please set the correct command line options for threading: -pthread (Linux), -pthreads (Solaris) or -mthreads (Mingw32)" 
In file included from /usr/include/boost/thread/thread.hpp:12, 
       from /usr/include/boost/thread.hpp:13, 
       from ../main.cpp:8: 
/usr/include/boost/thread/detail/platform.hpp:67: error: #error "Sorry, no boost threads are available for this platform." 
In file included from /usr/include/boost/thread.hpp:13, 
       from ../main.cpp:8: 
/usr/include/boost/thread/thread.hpp:19: error: #error "Boost threads unavailable on this platform" 

y así sucesivamente, una gran cantidad de errores relacionados con más impulso. Traté de agregar -pthread, -pthreads, -lpthread a donde pensé que podría, pero no resolvió el problema. Olvidé mencionar que intento construir el proyecto en eclipse, no trabajo en la línea de comandos, pero también probé g ++ -pthread main.cpp y arroja exactamente el mismo error. Proporcione la solución detallada o stepbystep, porque algunas de las cosas que responde aquí son simplemente chinas. Solo quiero ver correr algo simple y ni siquiera entiendo el problema. Ni siquiera entiendo ese mensaje de error, ¿qué quiere que haga? básicamente lo que hice: instalar eclipse, escribir las cosas de arriba en un nuevo proyecto, instalar libboost 1.4 utilizando el gestor sinaptic pkg, reiniciar todo e intenté compilar. Obtuve el error. No veo lo que está pasando o lo que me estoy perdiendo. (Tengo libc-dev) La pila realmente fluye ahora. necesita un poco de sueño para refrescarse. ¡Gracias chicos por la ayuda!

+1

Whoa, que es la primera vez que he oído Linux llamado Linux 10.10. Ubuntu debe haber tenido algún impacto, sin dudas. :-) – Shinnok

+0

lo siento, soy nuevo en todo esto de Linux y ubuntu, pero eso fue un error :) aunque gracioso – andrissh

+0

Muestre su línea de comandos de compilación en su totalidad en su pregunta. Los hilos Boost solo envuelven los hilos subyacentes del SO, por lo que al incluir boost/thread.hpp está solicitando pthreads. – Duck

Respuesta

2

Como el mensaje de error decir: Paso de -pthread al compilador:

g++ -pthread yourfile.cpp 

Además, para Debian, asegúrese de que ha instalado libc-dev.

+0

Gracias, lo intentó, pero da exactamente el mismo mensaje, esta vez lo escribe en la terminal, por supuesto. Me preguntaba, ¿cómo podría ejecutar esto en eclipse en lugar de la terminal? /usr/include/boost/config/requires_threads.hpp:47: error: #error "El soporte de encriptación del compilador no está activado. Configure las opciones de línea de comando correctas para enhebrar: -pthread (Linux), -pthreads (Solaris) o -mthreads (Mingw32) " – andrissh

+0

Tengo libc-dev. cualquier otro consejo? – andrissh

6
#include <boost/thread.hpp> 

int main(int argc, char *argv[]) { 
    return 0; 
} 

Compilar con g++ test.cpp -pthread -lboost_thread.

+0

¡Gracias por el consejo! exactamente el mismo error !!! (Vi que agregó return 0 :) – andrissh

+0

Debe haber algo roto con sus paquetes. Intente reinstalar boost y g ++. – orlp

+0

Hmm. Intenté que también ... el mismo error. ¿Debo instalar 10.04 ahora en lugar de 10.10? – andrissh

11

El problema es uno muy conocido de una versión de impulso tan antigua. Está compilando con gcc/g ++ 4.7, donde la referencia a pthreads ha cambiado a GLIBCXX_HAS_GTHREADS, por lo que boost no puede encontrar pthreads y deshabilitarlo.

lo que tiene dos opciones:

1) Actualizar boost_dev a la última versión (creo que se fija en 1.50+).

2) Parchee sus archivos de inclusión de boost (he hecho esto); Basta con modificar

"su carpeta de impulso" /include/config/stdlib/libstdcpp3.hpp

y el cambio:

#ifdef __GLIBCXX__ // gcc 3.4 and greater: 
# if defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \ 
     || defined(_GLIBCXX__PTHREADS) 
     // 
     // If the std lib has thread support turned on, then turn it on in Boost 
     // as well. We do this because some gcc-3.4 std lib headers define _REENTANT 
     // while others do not... 
     // 
#  define BOOST_HAS_THREADS 
# else 
#  define BOOST_DISABLE_THREADS 
# endif 

para añadir la nueva directiva en la condición:

#ifdef __GLIBCXX__ // gcc 3.4 and greater: 
# if defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \ 
     || defined(_GLIBCXX__PTHREADS) \ 
     || defined(_GLIBCXX_HAS_GTHREADS) // gcc 4.7 
     // 
     // If the std lib has thread support turned on, then turn it on in Boost 
     // as well. We do this because some gcc-3.4 std lib headers define _REENTANT 
     // while others do not... 
     // 
#  define BOOST_HAS_THREADS 
# else 
#  define BOOST_DISABLE_THREADS 
# endif 

Descripción del error y soluciones para Linux y Windows aquí:

https://svn.boost.org/trac/boost/ticket/6165

Enjoy.

3

Necesita instalar las bibliotecas de hebras de impulso:

sudo apt-get install libboost-thread-dev 
Cuestiones relacionadas