Ik heb de volgende demo van internet gehaald van 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);
}
Maar als ik het compileer op mijn computer (met Ubuntu Linux 9.04) krijg ik de volgende foutmelding:
[email protected]:~/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
Dit slaat voor mij nergens op, omdat de header pthread.h
bevat, die de functie pthread_create
zou moeten hebben. Enig idee wat er mis gaat?
Antwoord 1, autoriteit 100%
Voor Linux is het juiste commando:
gcc -pthread -o term term.c
Over het algemeen zouden bibliotheken bronnen en objecten op de opdrachtregel moeten volgen, en -lpthread
is geen “optie”, het is een bibliotheekspecificatie. Op een systeem waarop alleen libpthread.a
is geïnstalleerd,
gcc -lpthread ...
kan niet linken.
Antwoord 2, autoriteit 5%
in verduistering
properties->c/c++Build->setting->GCC C++ linker->bibliotheken in het bovenste gedeelte voeg “pthread” toe
Antwoord 3, autoriteit 5%
Voor Linux is het juiste commando:
gcc -o term term.c -lpthread
- je moet -lpthread net na de compile-opdracht plaatsen, deze opdracht zal de compiler vertellen om het programma uit te voeren met de pthread.h-bibliotheek.
- gcc -l linkt met een bibliotheekbestand.Link -l met bibliotheeknaam zonder het lib-voorvoegsel.
Antwoord 4, autoriteit 3%
Uitgevoerd vanaf de Linux-terminal, wat voor mij werkte, was compileren met het volgende commando (stel dat het c-bestand dat ik wil compileren test.c heet):
gcc -o test test.c -pthread
Ik hoop dat het iemand helpt!
Antwoord 5, autoriteit 2%
Ik geloof dat de juiste manier om pthread
toe te voegen in CMake
is met het volgende
find_package (Threads REQUIRED)
target_link_libraries(helloworld
${CMAKE_THREAD_LIBS_INIT}
)
Antwoord 6, autoriteit 2%
Eigenlijk geeft het verschillende voorbeelden van compileercommando’s die worden gebruikt voor pthreads-codes die in de onderstaande tabel worden vermeld, als u de volgende zelfstudie verder leest:
https://computing.llnl.gov/tutorials/pthreads/#Compiling
Antwoord 7, autoriteit 2%
Als u cmake gebruikt, kunt u het volgende gebruiken:
add_compile_options(-pthread)
Of
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
Antwoord 8
Compileer het als volgt: gcc demo.c -o demo -pthread
Antwoord 9
Geef in Visual Studio 2019 -pthread
op in de eigenschappenpagina’s voor het project onder:
Linker -> Opdrachtregel -> Extra opties
Typ -pthread
in het tekstvak.
Antwoord 10
Je moet de optie -lpthread
gebruiken met gcc.
Antwoord 11
u hoeft alleen “pthread” toe te voegen in proprieties=>C/C++ build=>GCC C++ Linker=>Libraries=> bovenste gedeelte “Bibliotheken(-l)”.
dat is het
Antwoord 12
Omdat geen van de antwoorden precies aan mijn behoefte voldeed (met behulp van MSVS-code), voeg ik hier ook mijn ervaring met deze IDE- en CMAKE-buildtools toe.
Stap 1: Zorg ervoor dat u in uw .cpp (of .hpp indien nodig) het volgende heeft opgenomen:
#include <functional>
Stap 2 Voor MSVSCode IDE-gebruikers:
Voeg deze regel toe aan uw c_cpp_properties.json-bestand:
"compilerArgs": ["-pthread"],
Stap 2 Voor gebruikers van CMAKE build-tools:
Voeg deze regel toe aan uw CMakeLists.txt
set(CMAKE_CXX_FLAGS "-pthread")
Opmerking: het toevoegen van de vlag -lpthread (in plaats van -pthread) resulteert in een mislukte koppeling.
Antwoord 13
controleer de man-pagina en je zult krijgen.
Compileren en linken met -pthread.
SYNOPSIS
#include <pthread.h>
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
Compile and link with -pthread.
....
Antwoord 14
Ga in Anjuta naar het menu Bouwen en vervolgens naar Project configureren.
Voeg in het vak Opties configureren toe:
LDFLAGS='-lpthread'
Hopelijk helpt het ook iemand…
Antwoord 15
Soms, als u meerdere bibliotheken gebruikt, controleert u de bibliotheekafhankelijkheid.
(bijv. -lpthread -lSDL… <==> … -lSDL -lpthread)