A gcc ' nem tud kapcsolódni a pthreadhez?

Nemrég telepítettem az XUbuntu 11.10 64bit-et, de problémám van a legegyszerűbb pthread példa összeállításával.

Itt van a kód 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); }  

És itt a fordítási parancs

 gcc -lpthread pthread_simple.c 

Az eredmények:

 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 

Tudja valaki, hogy mi ” okozza a problémát?

Megjegyzések

  • A stackexchange ' hibája, hogy üres az első két sorban? Kell lennie egy #include <pthread.h>
  • Igen, az előzetes környezetet használtam. Most helyesen kell megjelenítenie.
  • Megpróbálta gcc -pthread...?
  • BTW, kérjük, fordítsa le a következővel: -Wall, akkor ' hiányoznak a fejlécek. (És az sr_ helyes.)

Válasz

A latban A gcc fordító est verziói megkövetelik, hogy a könyvtárak kövessék az objektum- vagy forrásfájlokat.

Ennek fordításához tehát így kell lennie:

gcc pthread_sample.c -lpthread 

Általában a pthread kód fordítása így történik:

gcc -pthread pthread_sample.c 

Megjegyzések

  • @Karlson Meg tudná magyarázni, hogy a pthread.h fájl puszta felvétele miért nem elegendő a gcc számára a hivatkozások feloldásához?
  • @iamcreasy Mivel a deklaráció nem ugyanaz, mint a meghatározás. A programnak tudnia kell, hogy hol van az adott funkciót végrehajtó kód.

Válasz

gcc -o exectable_namme pthread_sample.c -lpthread 

megjegyzések

Válasz

kódot fordítson a következő paranccsal

gcc filename.c -lpthread -lrt 

Megjegyzések

  • Sziasztok! Hasznos lenne, ha szerkesztené a válaszát, hogy elmagyarázza, miért működik, és kiemelje, miért gondolja, hogy hozzáad valamit a már elfogadott válasz nem ' nem fedi le.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük