Tomé la siguiente demostración de la web en 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);
}
Pero cuando lo compilo en mi máquina (ejecutando Ubuntu Linux 9.04) me sale el siguiente error:
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
Esto no tiene ningún sentido para mí, porque el encabezado incluye pthread.h
, que debería tener la pthread_create
función. Alguna idea de lo que va mal?
c
linux
multithreading
pthreads
Ralph
fuente
fuente
-lc_r
), (c)-thread
o-threads
u otro, en lugar de o además de-lpthread
.-lpthread
es necesario durante la compilaciónLDFLAGS= -pthread -lpthread
Respuestas:
Ambas respuestas a esta pregunta hasta ahora son incorrectas .
Para Linux, el comando correcto es:
En general, las bibliotecas deben seguir fuentes y objetos en la línea de comandos, y
-lpthread
no es una "opción", es una especificación de biblioteca. En un sistema con sololibpthread.a
instalado,no se podrá vincular.
fuente
gcc term.c -lpthread
undefined reference to 'pthread_cancel'
yundefined reference to 'pthread_create'
errores. Me encontré con esta publicación SO y pensé en probar la respuesta de Employed Russian. Abrímakesnortsam.sh
en VI y ejecuté el comando:%s/lpthread/pthread/g
para reemplazar lpthread con pthread para que lo use en-pthread
lugar de-lpthread
cuando compila. Entonces pude compilar snortsam. Gracias empleado ruso!-pthread
a las Opciones de compilación del proyecto -> Configuración del vinculador -> Otras opciones del vinculador.en eclipse
propiedades-> c / c ++ Build-> setting-> GCC C ++ linker-> las bibliotecas en la parte superior agregan "pthread"
fuente
Ejecutando desde la terminal de Linux, lo que funcionó para mí fue compilar usando el siguiente comando (supongamos que el archivo c que quiero compilar se llama test.c):
Espero que ayude a alguien!
fuente
Para Linux, el comando correcto es:
fuente
Acutalmente, ofrece varios ejemplos de comandos de compilación utilizados para los códigos pthreads que se enumeran en la tabla a continuación, si continúa leyendo el siguiente tutorial:
https://computing.llnl.gov/tutorials/pthreads/#Compiling
fuente
Si está usando cmake, puede usar:
O
fuente
Compílelo así: gcc demo.c -o demo -pthread
fuente
Creo que la forma correcta de añadir
pthread
enCMake
es con el siguientefuente
En Visual Studio 2019, especifique
-pthread
en las páginas de propiedades del proyecto en:Escriba en
-pthread
el cuadro de texto.fuente
Necesita usar la opción
-lpthread
con gcc.fuente
-lpthread
no es una "opción", especifica una biblioteca.solo necesita Agregar "pthread" en propiedades => C / C ++ build => GCC C ++ Linker => Bibliotecas => parte superior "Bibliotecas (-l)". Eso es
fuente
revise la página de manual y obtendrá.
Compilar y vincular con -pthread.
fuente
En Anjuta, vaya al menú Generar, luego Configurar Proyecto. En el cuadro Configurar opciones, agregue:
Espero que ayude a alguien también ...
fuente
A veces, si usa varias bibliotecas, verifique la dependencia de la biblioteca. (por ejemplo, -lpthread -lSDL ... <==> ... -lSDL -lpthread)
fuente