gcc nie może ' połączyć z pthread?

Niedawno zainstalowałem XUbuntu 11.10 64bit, ale mam problem ze skompilowaniem najprostszego przykładu pthread.

Oto kod 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); }  

A tutaj to polecenie kompilacji

 gcc -lpthread pthread_simple.c 

Wyniki:

 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 

Czy ktoś wie co ” powoduje problem?

Komentarze

  • Czy jest to błąd stosu wymiany ', że masz puste załączniki w pierwszych dwóch wierszach? Powinien znajdować się #include <pthread.h>
  • Tak, korzystałem ze środowiska wstępnego. Powinno się teraz wyświetlać poprawnie.
  • Wypróbowano gcc -pthread...?
  • Przy okazji, skompiluj z -Wall, ' brakuje nagłówków. (I sr_ jest poprawne).

Odpowiedź

W łac Est wersje kompilatora gcc wymagają, aby biblioteki śledziły obiekt lub pliki źródłowe.

Aby to skompilować, powinno być:

gcc pthread_sample.c -lpthread 

Normalnie, chociaż kod pthread jest kompilowany w ten sposób:

gcc -pthread pthread_sample.c 

Komentarze

  • @Karlson Czy możesz wyjaśnić, dlaczego samo dołączenie pliku pthread.h nie wystarczy, aby gcc rozpoznał odniesienia?
  • @iamcreasy Ponieważ deklaracja nie jest taka sama jak definicja. Program musi wiedzieć, gdzie znajduje się kod wykonujący określoną funkcję.

Odpowiedź

gcc -o exectable_namme pthread_sample.c -lpthread 

Komentarze

  • Przydałaby się edycja odpowiedzi , aby wyjaśnić dlaczego różni się od już zaakceptowanej odpowiedzi.

Odpowiedź

skompiluj kod za pomocą następującego polecenia

gcc filename.c -lpthread -lrt 

Komentarze

  • Cześć! Byłoby pomocne, gdybyś mógł edytować swoją odpowiedź, aby wyjaśnić, dlaczego działa, i podkreślić, dlaczego Twoim zdaniem dodaje coś, czego już zaakceptowana odpowiedź nie ' nie obejmuje.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *