gcc non può ' collegarsi a pthread?

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

  • È colpa di stackexchange ' se hai include vuoti nelle prime due righe? Dovrebbe esserci un #include <pthread.h>
  • Sì, ho utilizzato lambiente pre. Ora dovrebbe essere visualizzato correttamente.
  • Hai provato gcc -pthread...?
  • BTW, compila con -Wall, ' mancano le intestazioni. (E sr_ è corretto.)

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

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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *