2010-08-24 22 views
3

J'essaie de compiler gcc 4.5.1 pour cygwin avec la prise en charge des threads C++ 0x. Cependant, le gcc résultant ne reconnaît pas l'option -pthread.gcc 4.5.1 Configurer les options pour la prise en charge des threads C++ 0x

Ma commande configure est:

./configure --enable-bootstrap --enable-shared --enable-shared-libgcc 
      --with-gnu-ld --enable-languages=c,c++ --enable-libgomp 
      --enable-libssp --enable-threads=posix --with-__thread 

L'exemple de programme est:

#include <iostream> 
#include <thread> 
using namespace std; 

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

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

Je compile un programme C++ en utilisant

$ gcc -Wall -g -std=c++0x -pthread Trial.cpp 
gcc: unrecognized option '-pthread' 
Trial.cpp: In function `int main()': 
Trial.cpp:21:5: error: `thread' was not declared in this scope 
Trial.cpp:21:12: error: expected `;' before `t' 
Trial.cpp:22:5: error: `t' was not declared in this scope 

Ma question est de savoir comment dois-je configurer gcc ?

+0

Etes-vous sûr que vous utilisez et comprendre correctement GCC? Je ne sais pas beaucoup à ce sujet, mais plusieurs choses semblent mal. – leppie

+0

Oui, j'aurais dû utiliser g ++. Mais ça ne marche pas encore. – Salil

Répondre

0

Comme vous le voyez dans le message d'erreur, le problème ne réside pas dans votre configuration, mais dans votre option g ++. Utilisation

g++ -lpthread 

pour pthreads (threads POSIX) et

g++ -lboost_thread 

pour les fils d'amplification. (-pthread est erroné.)

voir le manuel de g ++

man gcc 
+0

Ceci est un avis non informé. '-pthread' définit les indicateurs et les liens du préprocesseur par rapport aux bibliothèques appropriées, alors que' -lpthread' ne contient que des liens. Pour cygwin, l'option correcte est '-threads', utilisée à la fois pour la compilation et la liaison. –

+0

Correction: '-mthreads'. –

0

j'ai pu compiler votre code avec g++ avec juste -pthread et -std=c++0x drapeaux seul ou avec gcc en utilisant les drapeaux précédents, plus -lstdc++. Cependant, quand j'ai utilisé vos drapeaux, cela n'a pas fonctionné (l'erreur était assez différente cependant), alors peut-être essayer avec les drapeaux suivants la prochaine fois (parce que cela ne doit pas forcément être causé uniquement par vous) compiler GCC avec une mauvaise configuration).

gcc -lstdc++ -std=c++0x -pthread your.cpp 
g++ -std=c++0x -pthread your.cpp 
+0

Les deux options donnent la même erreur que l'option -pthread n'est pas reconnue. Je soupçonne que le problème est avec cygwin comme indiqué dans: http://stackoverflow.com/questions/3414834/gcc-stdthread-problem – Salil