gcc ei ' voi linkittää pthreadiin?

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

  • Onko vikaa, että sinulla on tyhjennetty stackexchange ' kahdessa ensimmäisessä rivissä? #include <pthread.h>
  • Kyllä, käytin ennakkoympäristöä. Sen pitäisi nyt näkyä oikein.
  • Yritti gcc -pthread...?
  • BTW, käännä -Wall, ' puuttuu otsikot. (Ja sr_ on oikea.)

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.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *