Referencia indefinida a pthread_create en Linux

Recogí la siguiente demostración de la web desde https://computing.llnl.gov/tutorials/pthreads/

#include  #include  #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 aparece 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 lo que 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 fonts 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 solo libpthread.a instalado,

 gcc -lpthread ... 

no podrá vincular.

Para el uso de Linux:

 gcc -pthread -o term term.c 

-pthread le dice al comstackdor que enlace en la biblioteca pthread y configure la comstackción para los hilos.

El uso de la opción -lpthread solo hace que la biblioteca pthread se vincule, las macros predefinidas no se definen.

En pocas palabras : debe usar la opción -pthread .

en eclipse

propiedades-> c / c ++ Build-> setting-> GCC C ++ linker-> libraries en la parte superior agrega “pthread”

Acualmente, ofrece varios ejemplos de comandos de comstackció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

enter image description here

Comstackrlo así: gcc demo.c -o demo -pthread

Necesitas usar la opción -lpthread con gcc.

solo necesita Agregar “pthread” en las propiedades => C / C ++ build => GCC C ++ Linker => Bibliotecas => parte superior “Bibliotecas (-l)”. Eso es

En Anjuta, ve al menú Generar, luego Configura Proyecto. En el cuadro de diálogo Configurar opciones, agregue:

 LDFLAGS='-lpthread' 

Espero que ayude a alguien también …

Algunas veces, si usa múltiples bibliotecas, verifique la dependencia de la biblioteca. (por ejemplo, -lpthread -lSDL … < ==> … -lSDL -lpthread)

Si está usando cmake, puede usar:

 add_compile_options(-pthread) 

O

 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")