J'ai récupéré la démo suivante sur le Web à partir de 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);
}
Mais lorsque je le compile sur ma machine (exécutant Ubuntu Linux 9.04), j'obtiens l'erreur suivante:
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
Cela n'a aucun sens pour moi, car l'en-tête inclut pthread.h
, qui devrait avoir la pthread_create
fonction. Des idées ce qui ne va pas?
c
linux
multithreading
pthreads
Ralph
la source
la source
-lc_r
), (c)-thread
ou-threads
ou autre, au lieu de ou en plus de-lpthread
.-lpthread
est nécessaire lors de la compilationLDFLAGS= -pthread -lpthread
Réponses:
Jusqu'à présent, les deux réponses à cette question sont incorrectes .
Pour Linux, la commande correcte est:
En général, les bibliothèques doivent suivre les sources et les objets en ligne de commande, et ce
-lpthread
n'est pas une "option", c'est une spécification de bibliothèque. Sur un système avec seulementlibpthread.a
installé,ne parviendra pas à lier.
la source
gcc term.c -lpthread
undefined reference to 'pthread_cancel'
et desundefined reference to 'pthread_create'
erreurs. Je suis tombé sur ce message SO et j'ai pensé essayer la réponse d'Employed Russian. J'ai ouvertmakesnortsam.sh
dans VI et j'ai exécuté la commande:%s/lpthread/pthread/g
pour remplacer lpthread par pthread afin qu'il utilise à la-pthread
place de-lpthread
lors de la compilation. J'ai alors pu compiler snortsam. Merci russe employé!-pthread
aux options de création de projet -> Paramètres de l'éditeur de liens -> Autres options de l'éditeur de liens.en éclipse
propriétés-> c / c ++ Build-> setting-> GCC C ++ linker-> bibliothèques dans la partie supérieure ajouter "pthread"
la source
À partir du terminal Linux, ce qui a fonctionné pour moi, c'était la compilation à l'aide de la commande suivante (supposons que le fichier c que je veux compiler s'appelle test.c):
J'espère que ça aide quelqu'un!
la source
Pour Linux, la commande correcte est:
la source
En fait, il donne plusieurs exemples de commandes de compilation utilisées pour les codes pthreads répertoriés dans le tableau ci-dessous, si vous continuez à lire le didacticiel suivant:
https://computing.llnl.gov/tutorials/pthreads/#Compiling
la source
Si vous utilisez cmake, vous pouvez utiliser:
Ou
la source
Compilez-le comme ceci: gcc demo.c -o demo -pthread
la source
Je crois que la bonne façon d'ajouter
pthread
enCMake
est avec ce qui suitla source
Dans Visual Studio 2019, spécifiez
-pthread
dans les pages de propriétés du projet sous:Tapez dans
-pthread
la zone de texte.la source
Vous devez utiliser l'option
-lpthread
avec gcc.la source
-lpthread
n'est pas une "option", il spécifie une bibliothèque.il vous suffit d'ajouter "pthread" dans les propriétés => C / C ++ build => GCC C ++ Linker => Libraries => top part "Libraries (-l)". c'est ça
la source
consultez la page de manuel et vous obtiendrez.
Compilez et liez avec -pthread.
la source
À Anjuta, accédez au menu Générer, puis Configurer le projet. Dans la zone Configurer les options, ajoutez:
J'espère que ça aidera quelqu'un aussi ...
la source
Parfois, si vous utilisez plusieurs bibliothèques, vérifiez la dépendance de la bibliothèque. (par exemple -lpthread -lSDL ... <==> ... -lSDL -lpthread)
la source