2011-10-05 9 views
5

Al compilar el código siguiente:Error al compilar gcc 4.6.1 C++ 0x código enhebrado en MacOSX Lion

#include <iostream> 
#include <thread> 

using namespace std; 

void hello() 
{ 
     cout << "Hello World!" << endl; 
} 

int main() 
{ 
     cout << "starting" << endl; 
     thread t(hello); 
     t.join(); 
     cout << "ending" << endl; 
     return 0; 
} 

usando:

$ g++-4.6.1 -std=c++0x -pthread threading.cpp 

me sale el siguiente error:

threading.cc: In function ‘int main()’: 
threading.cc:13:2: error: ‘thread’ was not declared in this scope 
threading.cc:13:9: error: expected ‘;’ before ‘t’ 
threading.cc:14:2: error: ‘t’ was not declared in this scope 

Esto está en MacOSX Lion con un gcc 4.6.1 personalizado. Todas las otras características de C++ 0x que son válidas para gcc 4.6 funcionan como un amuleto. ¿Es este un error específico de MacOSX?

+0

No sé lo que está sucediendo, pero sé que nunca uso -pthread; en lugar de eso, uso '-lpthread' al final (!) de las opciones del compilador – sehe

+1

Puede que aún esté en' std :: tr1'. C++ 11 no era oficial cuando se lanzó 4.6. –

+0

Puede que me equivoque aquí, pero no -pipee el enlace en los hilos posix? Esto no es necesario para su proyecto. – Alan

Respuesta

3

Ver http://gcc.gnu.org/PR50196 - Mac OS X no es compatible con algunas partes de subprocesos en los que confiamos. Construir la última versión no ayudará, pero podría ser corregido para GCC 4.7

+0

Gracias. Ahora tengo un error para rastrear. –

+0

Btw .. gracias por hacer un gran trabajo con GCC –

+1

He cerrado ese error como solucionado - su código de ejemplo debería funcionar en GCC 4.7 –

4

std::thread (y el resto de la biblioteca de hilos C++ 11) solo está disponible para algunas de las plataformas compatibles con gcc 4.6.1. Desafortunadamente para ti, MacOSX no es una de esas plataformas.

Mi biblioteca comercial Just::Thread proporciona las funciones de subprocesamiento C++ 11 para MacOSX de 32 bits con gcc 4.5, pero gcc 4.6 no es compatible todavía.

+0

Gracias. ¿Dónde puedo obtener este tipo de información sobre qué cosas son compatibles y en qué plataformas? ¿Crees que std :: thread está disponible si construyo lo último del repositorio fuente? –

Cuestiones relacionadas