gcc kan ' ikke linke til pthread?

Jeg har for nylig installeret XUbuntu 11.10 64bit, men jeg har problemer med at kompilere det mest enkle pthread-eksempel.

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 

Resultaterne:

 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 der nogen der ved hvad ” s forårsager problemet?

Kommentarer

  • Er det stackexchange ' s fejl, du har tom, inkluderer i de første to linjer? Der skulle være et #include <pthread.h>
  • Ja, jeg brugte præ-miljøet. Det skal nu vises korrekt.
  • Forsøgt gcc -pthread...?
  • BTW, kompiler venligst med -Wall, du ' mangler overskrifter. (Og sr_ er korrekt.)

Svar

I lat est-versioner af gcc -kompilator kræver, at biblioteker følger objekt- eller kildefilerne.

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

gcc pthread_sample.c -lpthread 

Selvom pthread-koden normalt er kompileret på denne måde:

gcc -pthread pthread_sample.c 

Kommentarer

  • @Karlson Kan du venligst forklare, hvorfor bare inkludering af pthread.h filen ikke er nok til, at gcc kan løse referencerne?
  • @iamcreasy Fordi erklæring ikke er det samme som definition. Programmet skal vide, hvor koden, der udfører en bestemt funktion, er.

Svar

gcc -o exectable_namme pthread_sample.c -lpthread 

Kommentarer

  • Det ville være nyttigt at redigere dit svar for at forklare hvorfor dette adskiller sig fra det allerede accepterede svar.

Svar

kompilér kode ved hjælp af følgende kommando

gcc filename.c -lpthread -lrt 

Kommentarer

  • Hej! Det ville være nyttigt, hvis du kunne redigere dit svar for at forklare, hvorfor det fungerer, og for at fremhæve, hvorfor du synes, det tilføjer noget, som det allerede accepterede svar ikke dækker ' t.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *