gcc peut ' t être lié à pthread?

Jai récemment installé XUbuntu 11.10 64bit, mais jai des problèmes pour compiler lexemple de pthread le plus simple.

Voici le code pthread_simple.c:

 #include <stdio.h> #include <pthread.h> main() { pthread_t f2_thread, f1_thread; void *f2(), *f1(); int i1,i2; i1 = 1; i2 = 2; pthread_create(&f1_thread,NULL,f1,&i1); pthread_create(&f2_thread,NULL,f2,&i2); pthread_join(f1_thread,NULL); pthread_join(f2_thread,NULL); } void *f1(int *x){ int i; i = *x; sleep(1); printf("f1: %d",i); pthread_exit(0); } void *f2(int *x){ int i; i = *x; sleep(1); printf("f2: %d",i); pthread_exit(0); }  

Et ici est la commande de compilation

 gcc -lpthread pthread_simple.c 

Les résultats:

 lptang@tlp-linux:~/test/test-pthread$ gcc -lpthread pthread_simple.c /tmp/ccmV0LdM.o: In function `main": pthread_simple.c:(.text+0x2c): undefined reference to `pthread_create" pthread_simple.c:(.text+0x46): undefined reference to `pthread_create" pthread_simple.c:(.text+0x57): undefined reference to `pthread_join" pthread_simple.c:(.text+0x68): undefined reference to `pthread_join" collect2: ld returned 1 exit status 

Quelquun sait-il quoi  » s cause le problème?

Commentaires

  • Est-ce la faute de stackexchange ' que vous avez vide inclut dans les deux premières lignes? Il devrait y avoir un #include <pthread.h>
  • Oui, jai utilisé lenvironnement pré. Il devrait maintenant safficher correctement.
  • Essayé gcc -pthread...?
  • BTW, veuillez compiler avec -Wall, vous ' des en-têtes manquants. (Et sr_ est correct.)

Réponse

Dans la lat Les versions est du compilateur gcc exigent que les bibliothèques suivent lobjet ou les fichiers source.

Donc, pour compiler ceci, il devrait être:

gcc pthread_sample.c -lpthread 

Normalement, bien que le code pthread soit compilé de cette façon:

gcc -pthread pthread_sample.c 

Commentaires

  • @Karlson Pouvez-vous expliquer pourquoi le simple fait dinclure le fichier pthread.h ne suffit pas à gcc pour résoudre les références?
  • @iamcreasy Parce que la déclaration ne lest pas la même que la définition. Le programme a besoin de savoir où se trouve le code exécutant une fonction particulière.

Réponse

gcc -o exectable_namme pthread_sample.c -lpthread 

Commentaires

Réponse

compilez le code en utilisant la commande suivante

gcc filename.c -lpthread -lrt 

Commentaires

  • Salut! Il serait utile que vous puissiez modifier votre réponse pour expliquer pourquoi cela fonctionne et pour mettre en évidence pourquoi vous pensez quelle ajoute quelque chose que la réponse déjà acceptée ne couvre pas '.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *