J'ai récemment installé XUbuntu 11.10 64bit, mais j'ai du mal à compiler l'exemple 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 voici la commande de compilation
gcc -lpthread pthread_simple.c
Les resultats:
lptang @ tlp-linux: ~/test/test-pthread $ gcc -lpthread pthread_simple.c /tmp/ccmV0LdM.o: En fonction `main ': pthread_simple. c :(. text + 0x2c): référence non définie à `pthread_create ' pthread_simple.c :(. text + 0x46): référence non définie à` pthread_create' pthread_simple.c :(. text + 0x57): référence non définie à `pthread_join ' Pthread_simple.c :(. Text + 0x68): référence non définie à` pthread_join' Collect2: ld a renvoyé 1 état de sortie
Quelqu'un sait-il ce qui cause le problème?
Dans les dernières versions du compilateur gcc
, les bibliothèques doivent suivre l'objet ou les fichiers source.
Donc, pour compiler cela, cela devrait être:
gcc pthread_sample.c -lpthread
Normalement, si le code pthread est compilé de cette façon:
gcc -pthread pthread_sample.c
gcc -o exectable_namme pthread_sample.c -lpthread
compiler du code en utilisant la commande suivante
gcc filename.c -lpthread -lrt