gcc kan ' t linken naar pthread?

Ik heb onlangs XUbuntu 11.10 64bit geïnstalleerd, maar ik heb problemen met het compileren van het eenvoudigste pthread-voorbeeld.

Hier is de code 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); }  

En hier is de compileeropdracht

 gcc -lpthread pthread_simple.c 

De resultaten:

 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 

Weet iemand wat ” veroorzaakt het probleem?

Opmerkingen

  • Is het stackexchange ' s fout dat je lege include in de eerste twee regels? Er zou een #include <pthread.h>
  • moeten staan. Ja, ik heb de pre-omgeving gebruikt. Deze zou nu correct moeten worden weergegeven.
  • Geprobeerd gcc -pthread...?
  • Trouwens, compileer met -Wall, je ' mist headers. (En sr_ is correct.)

Antwoord

In de lat est versies van gcc compiler vereisen dat bibliotheken het object of de bronbestanden volgen.

Dus om dit te compileren zou het moeten zijn:

gcc pthread_sample.c -lpthread 

Normaal gesproken, hoewel pthread-code op deze manier is gecompileerd:

gcc -pthread pthread_sample.c 

Reacties

  • @Karlson Kunt u alstublieft uitleggen waarom het opnemen van het pthread.h -bestand niet voldoende is voor gcc om de verwijzingen op te lossen?
  • @iamcreasy Omdat declaratie dat niet is hetzelfde als de definitie. Het programma moet weten waar de code die een bepaalde functie uitvoert, is.

Answer

gcc -o exectable_namme pthread_sample.c -lpthread 

Reacties

Antwoord

compileer code met het volgende commando

gcc filename.c -lpthread -lrt 

Reacties

  • Hallo! Het zou handig zijn als u uw antwoord zou kunnen bewerken om uit te leggen waarom het werkt, en om te benadrukken waarom u denkt dat het iets toevoegt dat het reeds geaccepteerde antwoord niet ' t cover.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *