gcc nemůže ' t odkazovat na pthread?

Nedávno jsem nainstaloval 64bitovou verzi XUbuntu 11.10, ale mám problém s kompilací nejjednoduššího příkladu pthread.

Zde je 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); }  

A tady je příkaz kompilace

 gcc -lpthread pthread_simple.c 

Výsledky:

 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 

Ví někdo co “ způsobuje problém?

Komentáře

  • Je to chyba stackexchange ' že máte prázdné zahrnuje v prvních dvou řádcích? Mělo by existovat #include <pthread.h>
  • Ano, použil jsem předcházející prostředí. Mělo by se nyní zobrazovat správně.
  • Vyzkoušeno gcc -pthread...?
  • BTW, sestavte prosím s -Wall, ' chybí vám záhlaví. (A sr_ je správné.)

Odpovědět

V lat est verze kompilátoru gcc vyžadují, aby knihovny sledovaly objekt nebo zdrojové soubory.

Takže ke kompilaci by to mělo být:

gcc pthread_sample.c -lpthread 

Normálně se kód pthread obvykle kompiluje takto:

gcc -pthread pthread_sample.c 

Komentáře

  • @Karlson Můžete mi prosím vysvětlit, proč pouze zahrnutí souboru pthread.h nestačí na to, aby gcc vyřešil odkazy?
  • @iamcreasy Protože deklarace není stejné jako definice. Program potřebuje vědět, kde je kód provádějící konkrétní funkci.

Odpověď

gcc -o exectable_namme pthread_sample.c -lpthread 

Komentáře

  • Bylo by užitečné upravit odpověď a vysvětlit, proč toto se liší od již přijaté odpovědi.

Odpověď

zkompilovat kód pomocí následujícího příkazu

gcc filename.c -lpthread -lrt 

Komentáře

  • Ahoj! Bylo by užitečné, kdybyste svou odpověď mohli upravit, abyste vysvětlili, proč to funguje, a zdůrazněte, proč si myslíte, že přidává něco, co již přijatá odpověď nezakrývá. / ul>

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *