gcc kann ' keine Verknüpfung zu pthread herstellen?

Ich habe kürzlich XUbuntu 11.10 64bit installiert, habe jedoch Probleme beim Kompilieren des einfachsten pthread-Beispiels.

Hier ist der 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); }  

Und hier ist der Kompilierungsbefehl

 gcc -lpthread pthread_simple.c 

Die Ergebnisse:

 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 

Weiß jemand was? “ Verursacht das Problem?

Kommentare

  • Ist es der Fehler von stackexchange ', dass Sie leere Includes haben In den ersten beiden Zeilen sollte ein #include <pthread.h>
  • vorhanden sein. Ja, ich habe die Vorumgebung verwendet. Sie sollte jetzt korrekt angezeigt werden.
  • Versucht gcc -pthread...?
  • Übrigens, bitte kompilieren Sie mit -Wall, Sie ' haben keine Header. (Und sr_ ist korrekt.)

Antwort

In der lat Die meisten Versionen des gcc -Compilers erfordern, dass Bibliotheken den Objekt- oder Quelldateien folgen.

Um dies zu kompilieren, sollte dies sein:

gcc pthread_sample.c -lpthread 

Normalerweise wird Pthread-Code folgendermaßen kompiliert:

gcc -pthread pthread_sample.c 

Kommentare

  • @Karlson Können Sie bitte erklären, warum es für gcc nicht ausreicht, nur die Datei pthread.h einzuschließen, um die Referenzen aufzulösen?
  • @iamcreasy Weil dies nicht der Fall ist das gleiche wie Definition. Das Programm muss wissen, wo sich der Code befindet, der eine bestimmte Funktion ausführt.

Antwort

gcc -o exectable_namme pthread_sample.c -lpthread 

Kommentare

Antwort

Kompilieren Sie den Code mit dem folgenden Befehl

gcc filename.c -lpthread -lrt 

Kommentare

  • Hi! Es wäre hilfreich, wenn Sie Ihre Antwort bearbeiten könnten, um zu erklären, warum sie funktioniert, und um hervorzuheben, warum sie Ihrer Meinung nach etwas hinzufügt, das die bereits akzeptierte Antwort ' nicht abdeckt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.