gcc nu poate ' să se conecteze la pthread?

Am instalat recent XUbuntu 11.10 64 biți, dar am probleme la compilarea celui mai simplu exemplu de pthread.

Iată codul 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); }  

Și aici este comanda de compilare

 gcc -lpthread pthread_simple.c 

Rezultatele:

 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 

Stie cineva ce ” cauzează problema?

Comentarii

  • Este vina stackexchange ' că aveți gol include în primele două rânduri? Ar trebui să existe un #include <pthread.h>
  • Da, am folosit mediul pre. Acum ar trebui să se afișeze corect.
  • Încercat gcc -pthread...?
  • BTW, vă rugăm să compilați cu -Wall, ' lipsesc anteturile. (Și sr_ este corect.)

Răspunde

În lat Versiunile est ale compilatorului gcc necesită ca bibliotecile să urmeze fișierele obiect sau sursă.

Deci, pentru a compila acest lucru, ar trebui să fie:

gcc pthread_sample.c -lpthread 

În mod normal, deși codul pthread este compilat în acest fel:

gcc -pthread pthread_sample.c 

Comentarii

  • @Karlson Puteți explica de ce nu este suficient doar includerea fișierului pthread.h pentru ca gcc să rezolve referințele?
  • @iamcreasy Deoarece declarația nu este la fel ca definiția. Programul trebuie să știe unde este codul care execută o anumită funcție.

Răspuns

gcc -o exectable_namme pthread_sample.c -lpthread 

Comentarii

Răspuns

compilați codul folosind următoarea comandă

gcc filename.c -lpthread -lrt 

Comentarii

  • Bună! Ar fi util dacă ați putea edita răspunsul pentru a explica de ce funcționează și pentru a evidenția de ce credeți că adaugă ceva, răspunsul deja acceptat nu acoperă. <

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *