pthread_join - Referencia indefinida a pthread_create en Linux
undefined reference to pthread_create solved (10)
A veces, si usa varias bibliotecas, verifique la dependencia de la biblioteca. (por ejemplo, -lpthread -lSDL ... <==> ... -lSDL -lpthread)
Recogí la siguiente demostración de la web desde 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) obtengo 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 función pthread_create
. ¿Alguna idea de qué va mal?
Ambas respuestas a esta pregunta hasta ahora son incorrectas .
Para Linux el comando correcto es:
gcc -pthread -o term term.c
En general, las bibliotecas deben seguir las fuentes y los objetos en la línea de comandos, y -lpthread
no es una "opción", es una especificación de la biblioteca. En un sistema con solo libpthread.a
instalado,
gcc -lpthread ...
no podrá enlazar.
Compílalo así: gcc demo.c -o demo -pthread
Ejecutando desde el terminal de Linux, lo que funcionó para mí fue compilar usando el siguiente comando (suponga que el archivo c que quiero compilar se llama test.c):
gcc -o test test.c -pthread
Espero que ayude a alguien!
En Anjuta, vaya al menú Generar, luego Configurar proyecto. En el cuadro de opciones de configuración, agregue:
LDFLAGS=''-lpthread''
Espero que ayude a alguien también ...
En la práctica, da varios ejemplos de comandos de compilación utilizados para los códigos pthreads que se enumeran en la siguiente tabla, si continúa leyendo el siguiente tutorial:
Necesitas usar la opción -lpthread
con gcc.
Si está utilizando cmake, puede usar:
add_compile_options(-pthread)
O
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
en eclipse
propiedades-> c / c ++ Build-> setting-> GCC C ++ linker-> bibliotecas en la parte superior agregar "pthread"
solo necesita Agregar "pthread" en propiedades => C / C ++ build => GCC C ++ Linker => Libraries => parte superior "Libraries (-l)". Eso es