2011-10-05 11 views
5

Kompilując następujący kod:Błąd przy kompilacji gcc 4.6.1 C++ 0x kod gwintów na 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; 
} 

używając:

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

pojawia się następujący błąd:

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 

Jest to na MacOSX Lion z niestandardowym wbudowanym gcc 4.6.1. Wszystkie inne funkcje C++ 0x, które są ważne dla gcc 4.6, działają jak czar. Czy jest to błąd specyficzny dla MacOSX?

+0

Nie wiem co się dzieje, ale wiem, że nigdy nie używam -pthread; zamiast tego używam '-lpthread' na końcu (!) opcji kompilatora – sehe

+1

Może to być nadal w' std :: tr1'. C++ 11 nie było oficjalne po wydaniu 4.6. –

+0

Mogę się pomylić tutaj, ale czy nie -przeczytane łącze w wątkach posix? To nie jest potrzebne w twoim projekcie. – Alan

Odpowiedz

3

Zobacz http://gcc.gnu.org/PR50196 - Mac OS X nie obsługuje niektórych części Pthreads, na których bazujemy. Budowanie najnowszej wersji nie pomoże, ale może być naprawione dla GCC 4.7

+0

Dzięki. Teraz mam błąd do śledzenia. –

+0

Btw .. dzięki za świetną robotę z GCC –

+1

Zamknąłem ten błąd jako naprawiony - Twój przykładowy kod powinien działać w GCC 4.7 –

4

std::thread (i reszta biblioteki wątków C++ 11) jest dostępna tylko dla niektórych platform obsługiwanych przez gcc 4.6.1. Niestety, MacOSX nie jest jedną z tych platform.

Moja komercyjna biblioteka Just::Thread zapewnia funkcje wątków C++ 11 dla 32-bitowego MacOSXa z gcc 4.5, ale gcc 4.6 nie jest jeszcze obsługiwany.

+0

Dzięki. Gdzie mogę uzyskać tego rodzaju informacje na temat tego, co jest obsługiwane i na jakich platformach? Czy myślisz, że std :: thread jest dostępny, jeśli tworzę najnowszą wersję ze źródłowego repozytorium? –

Powiązane problemy