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
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
- Hasznos lenne szerkeszteni a választ , hogy megmagyarázza, miért ez eltér a már elfogadott választól.
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.
#include <pthread.h>
gcc -pthread...
?-Wall
, akkor ' hiányoznak a fejlécek. (És az sr_ helyes.)