solved pthread_join pthread_detach pthread_create pthread hilos compilar c linux multithreading pthreads

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 ...



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