gcc kan ' ikke lenke til pthread?

Jeg har nylig installert XUbuntu 11.10 64bit, men jeg har problemer med å kompilere det mest enkle pthread-eksemplet.

Her er koden 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); }  

Og her er kompileringskommandoen

 gcc -lpthread pthread_simple.c 

Resultatene:

 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 

Er det noen som vet hva » s forårsaker problemet?

Kommentarer

  • Er det stackexchange ' s feil du har tomt inkluderer i de to første linjene? Det burde være et #include <pthread.h>
  • Ja, jeg brukte pre-miljøet. Det skal nå vises riktig.
  • Prøvd gcc -pthread...?
  • BTW, kompiler med -Wall, du ' mangler overskrifter. (Og sr_ er riktig.)

Svar

I lat est versjoner av gcc kompilator krever at biblioteker følger objektet eller kildefilene.

Så for å kompilere dette skal det være:

gcc pthread_sample.c -lpthread 

Normalt sett er pthread-koden samlet slik:

gcc -pthread pthread_sample.c 

Kommentarer

  • @Karlson Kan du forklare hvorfor bare å inkludere pthread.h filen ikke er nok til at gcc kan løse referansene?
  • @iamcreasy Fordi erklæring ikke er det samme som definisjon. Programmet trenger å vite hvor koden som utfører en bestemt funksjon er.

Svar

gcc -o exectable_namme pthread_sample.c -lpthread 

Kommentarer

  • Det ville være nyttig å redigere svaret for å forklare hvorfor dette er forskjellig fra det allerede aksepterte svaret.

Svar

kompiler koden med følgende kommando

gcc filename.c -lpthread -lrt 

Kommentarer

  • Hei! Det ville være nyttig hvis du kunne redigere svaret ditt for å forklare hvorfor det fungerer, og for å markere hvorfor du tror det legger til noe som allerede akseptert svar ikke dekker ' t.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *