Ho recentemente installato XUbuntu 11.10 64bit, ma ho problemi a compilare il più semplice esempio di pthread.
Ecco il codice 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); }
E qui è il comando di compilazione
gcc -lpthread pthread_simple.c
I risultati:
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
Qualcuno sa cosa ” sta causando il problema?
Commenti
Risposta
In lat Le versioni est del compilatore gcc
richiedono che le librerie seguano i file oggetto o sorgente.
Quindi per compilare questo dovrebbe essere:
gcc pthread_sample.c -lpthread
Normalmente, sebbene il codice pthread venga compilato in questo modo:
gcc -pthread pthread_sample.c
Commenti
- @Karlson Puoi spiegare perché includere solo il file
pthread.h
non è sufficiente a gcc per risolvere i riferimenti? - @iamcreasy Perché la dichiarazione non lo è lo stesso della definizione. Il programma deve sapere dove si trova il codice che esegue una particolare funzione.
Risposta
gcc -o exectable_namme pthread_sample.c -lpthread
Commenti
- Sarebbe utile modificare la tua risposta per spiegare il motivo questa è diversa dalla risposta già accettata.
Risposta
compila il codice utilizzando il seguente comando
gcc filename.c -lpthread -lrt
Commenti
- Ciao! Sarebbe utile se potessi modificare la tua risposta per spiegare perché funziona e per evidenziare perché pensi che aggiunga qualcosa che la risposta già accettata non ' copre.
#include <pthread.h>
gcc -pthread...
?-Wall
, ' mancano le intestazioni. (E sr_ è corretto.)