541 Stimmen

Undefinierter Verweis auf pthread_create in Linux

Ich habe die folgende Demo aus dem Internet heruntergeladen https://computing.llnl.gov/tutorials/pthreads/

#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 Rechner (mit Ubuntu Linux 9.04) kompiliere, erhalte ich 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, denn die Kopfzeile enthält pthread.h die die pthread_create Funktion. Hat jemand eine Idee, was falsch läuft?

30voto

Rufus Punkte 4315

Ich glaube, dass die richtige Art und Weise des Hinzufügens von pthread en CMake ist mit den folgenden

find_package (Threads REQUIRED)

target_link_libraries(helloworld
    ${CMAKE_THREAD_LIBS_INIT}
)

20voto

dylanninin Punkte 604

Tatsächlich gibt es mehrere Beispiele für Kompilierbefehle, die für pthreads-Codes verwendet werden, die in der folgenden Tabelle aufgeführt sind, wenn Sie das folgende Tutorial weiter lesen:

https://computing.llnl.gov/tutorials/pthreads/#Compiling

enter image description here

11voto

leesagacious Punkte 143

Kompilieren Sie es wie folgt: gcc demo.c -o demo -pthread

8voto

WBuck Punkte 4067

In Visual Studio 2019 angeben -pthread auf den Eigenschaftsseiten für das Projekt unter:

Linker -> Kommandozeile -> Zusätzliche Optionen

Tippen Sie ein -pthread in das Textfeld ein.

4voto

xiaolong Punkte 3026

Sie müssen die Option -lpthread mit gcc.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X