Olen äskettäin asentanut XUbuntu 11.10 64bit -tietokoneen, mutta minulla on vaikeuksia koota yksinkertaisin pthread-esimerkki.
Tässä on koodi 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); }
Ja tässä on kääntökomento
gcc -lpthread pthread_simple.c
Tulokset:
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
Tietääkö kukaan mitä ” aiheuttavatko ongelman?
Kommentit
Vastaa
Lat kääntäjän gcc
est-versiot edellyttävät, että kirjastot seuraavat objekti- tai lähdetiedostoja.
Joten tämän kääntämisen pitäisi olla:
gcc pthread_sample.c -lpthread
Normaalisti vaikka pthread-koodi käännetään tällä tavalla:
gcc -pthread pthread_sample.c
Kommentit
- @Karlson Voitteko selittää, miksi pelkkä
pthread.h
-tiedoston sisällyttäminen ei riitä gcc: lle viitteiden ratkaisemiseen? - @iamcreasy Koska ilmoitus ei ole sama kuin määritelmä. Ohjelman on tiedettävä, missä tietyn toiminnon suorittava koodi on.
Vastaa
gcc -o exectable_namme pthread_sample.c -lpthread
kommentit
- On hyödyllistä muokata vastaustasi selittääksesi miksi tämä eroaa jo hyväksytystä vastauksesta.
Answer
käännä koodi seuraavan komennon avulla
gcc filename.c -lpthread -lrt
Kommentit
- Hei! Olisi hyödyllistä, jos voisit muokata vastaustasi selittääkseen, miksi se toimii, ja korostamaan, miksi luulet sen lisäävän jotain, jo jo hyväksytty vastaus ei kata.
#include <pthread.h>
gcc -pthread...
?-Wall
, ' puuttuu otsikot. (Ja sr_ on oikea.)