Ich habe die folgende Demo aus dem Internet unter https://computing.llnl.gov/tutorials/pthreads/ abgerufen.
#include <pthread.h>
#include <stdio.h>
#define NUM_THREADS 5
void *PrintHello(void *threadid)
{
long tid;
tid = (long)threadid;
printf("Hello World! It's me, thread #%ld!\n", tid);
pthread_exit(NULL);
}
int main (int argc, char *argv[])
{
pthread_t threads[NUM_THREADS];
int rc;
long t;
for(t=0; t<NUM_THREADS; t++){
printf("In main: creating thread %ld\n", t);
rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t);
if (rc){
printf("ERROR; return code from pthread_create() is %d\n", rc);
exit(-1);
}
}
pthread_exit(NULL);
}
Aber wenn ich es auf meinem Computer kompiliere (unter Ubuntu Linux 9.04), erhalte ich den folgenden Fehler:
corey@ubuntu:~/demo$ gcc -o term term.c
term.c: In function ‘main’:
term.c:23: warning: incompatible implicit declaration of built-in function ‘exit’
/tmp/cc8BMzwx.o: In function `main':
term.c:(.text+0x82): undefined reference to `pthread_create'
collect2: ld returned 1 exit status
Das ergibt für mich keinen Sinn, da der Header enthält pthread.h
, der die pthread_create
Funktion haben sollte. Irgendwelche Ideen, was falsch läuft?
c
linux
multithreading
pthreads
Ralph
quelle
quelle
-lc_r
), (c)-thread
oder-threads
oder andere, anstelle oder zusätzlich zu-lpthread
.-lpthread
wird beim Kompilieren benötigtLDFLAGS= -pthread -lpthread
Antworten:
Beide Antworten auf diese Frage sind bisher falsch .
Für Linux lautet der richtige Befehl:
Im Allgemeinen sollten Bibliotheken Quellen und Objekten in der Befehlszeile folgen und
-lpthread
sind keine "Option", sondern eine Bibliotheksspezifikation. Auf einem System mit nurlibpthread.a
installiert,wird nicht verlinken.
quelle
gcc term.c -lpthread
undefined reference to 'pthread_cancel'
undundefined reference to 'pthread_create'
Fehler. Ich bin auf diesen SO-Beitrag gestoßen und dachte, ich würde die Antwort von Employed Russian ausprobieren. Ich habemakesnortsam.sh
in VI geöffnet und den Befehl ausgeführt:%s/lpthread/pthread/g
, lpthread durch pthread zu ersetzen, damit es-pthread
anstelle-lpthread
beim Kompilieren verwendet wird. Ich konnte dann Snortsam kompilieren. Danke Angestelltes Russisch!-pthread
Zu Projekterstellungsoptionen hinzufügen -> Linker-Einstellungen -> Andere Linker-Optionen.in der Finsternis
Eigenschaften-> c / c ++ Build-> Einstellung-> GCC C ++ Linker-> Bibliotheken im oberen Teil fügen Sie "pthread" hinzu
quelle
Beim Ausführen vom Linux-Terminal aus funktionierte das Kompilieren mit dem folgenden Befehl (Angenommen, die c-Datei, die ich kompilieren möchte, heißt test.c):
Hoffe es hilft jemandem!
quelle
Für Linux lautet der richtige Befehl:
quelle
Wenn Sie das folgende Tutorial weiterlesen, finden Sie in der folgenden Tabelle einige Beispiele für Kompilierungsbefehle, die für pthreads-Codes verwendet werden:
https://computing.llnl.gov/tutorials/pthreads/#Compiling
quelle
Wenn Sie cmake verwenden, können Sie Folgendes verwenden:
Oder
quelle
Kompilieren Sie es wie folgt: gcc demo.c -o demo -pthread
quelle
Ich glaube , die richtige Art und Weise der Zugabe
pthread
inCMake
den folgenden Ergebnissenquelle
Geben Sie
-pthread
in Visual Studio 2019 auf den Eigenschaftenseiten für das Projekt unter:Geben Sie
-pthread
in das Textfeld ein .quelle
Sie müssen die Option
-lpthread
mit gcc verwenden.quelle
-lpthread
ist keine "Option", sondern gibt eine Bibliothek an.Sie müssen nur "pthread" in den Eigenschaften hinzufügen => C / C ++ build => GCC C ++ Linker => Bibliotheken => oberer Teil "Libraries (-l)". das ist es
quelle
Überprüfen Sie die Manpage und Sie werden erhalten.
Kompilieren und verknüpfen Sie mit -pthread.
quelle
Gehen Sie in Anjuta zum Menü Erstellen und dann zum Konfigurieren des Projekts. Fügen Sie im Feld Optionen konfigurieren Folgendes hinzu:
Hoffe, es wird auch jemandem helfen ...
quelle
Wenn Sie mehrere Bibliotheken verwenden, überprüfen Sie manchmal die Bibliotheksabhängigkeit. (zB -lpthread -lSDL ... <==> ... -lSDL -lpthread)
quelle