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
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
- Il serait utile de modifier votre réponse pour expliquer pourquoi cest différent de la réponse déjà acceptée.
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 '.
#include <pthread.h>
gcc -pthread...
?-Wall
, vous ' des en-têtes manquants. (Et sr_ est correct.)