gcc ¿puede ' t enlazar con pthread?

Recientemente instalé XUbuntu 11.10 64bit, pero tengo problemas para compilar el ejemplo de pthread más simple.

Aquí está el código pthread_simple.c:

 #include <stdio.h> #include <pthread.h> main() { pthread_t f2_thread, f1_thread; void *f2(), *f1(); int i1,i2; i1 = 1; i2 = 2; pthread_create(&f1_thread,NULL,f1,&i1); pthread_create(&f2_thread,NULL,f2,&i2); pthread_join(f1_thread,NULL); pthread_join(f2_thread,NULL); } void *f1(int *x){ int i; i = *x; sleep(1); printf("f1: %d",i); pthread_exit(0); } void *f2(int *x){ int i; i = *x; sleep(1); printf("f2: %d",i); pthread_exit(0); }  

Y aquí es el comando de compilación

 gcc -lpthread pthread_simple.c 

Los resultados:

 lptang@tlp-linux:~/test/test-pthread$ gcc -lpthread pthread_simple.c /tmp/ccmV0LdM.o: In function `main": pthread_simple.c:(.text+0x2c): undefined reference to `pthread_create" pthread_simple.c:(.text+0x46): undefined reference to `pthread_create" pthread_simple.c:(.text+0x57): undefined reference to `pthread_join" pthread_simple.c:(.text+0x68): undefined reference to `pthread_join" collect2: ld returned 1 exit status 

¿Alguien sabe qué » s causando el problema?

Comentarios

  • ¿Es un error de stackexchange ' que tiene inclusiones vacías en las dos primeras líneas? Debería haber un #include <pthread.h>
  • Sí, utilicé el entorno previo. Ahora debería mostrarse correctamente.
  • ¿Intentó gcc -pthread...?
  • Por cierto, compile con -Wall, ' faltan encabezados (y sr_ es correcto).

Respuesta

En la latitud Las versiones est del compilador gcc requieren que las bibliotecas sigan el objeto o los archivos fuente.

Así que para compilar esto debería ser:

gcc pthread_sample.c -lpthread 

Normalmente, aunque el código pthread se compila de esta manera:

gcc -pthread pthread_sample.c 

Comentarios

  • @Karlson ¿Puede explicar por qué solo incluir el archivo pthread.h no es suficiente para que gcc resuelva las referencias?
  • @iamcreasy Porque la declaración no es lo mismo que la definición. El programa necesita saber dónde está el código que ejecuta una función en particular.

Responder

gcc -o exectable_namme pthread_sample.c -lpthread 

Comentarios

Responder

compile el código usando el siguiente comando

gcc filename.c -lpthread -lrt 

Comentarios

  • ¡Hola! Sería útil si pudiera editar su respuesta para explicar por qué funciona y para resaltar por qué cree que agrega algo que la respuesta ya aceptada no ' t cubre.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *