2012-03-21 30 views
7

tengo este código:referencia indefinida a pthread_create

#include <stdio.h> 
#include <pthread.h> 

void* cuoco(void* arg) 
{ 
    fprintf(stderr,"Inizio codice cuoco\n"); 
    fprintf(stderr,"Fine codice cuoco\n"); 
    return NULL; 
} 

void* cameriere(void* arg) 
{ 
    fprintf(stderr,"Inizio codice cameriere\n"); 
    fprintf(stderr,"Fine codice cameriere\n"); 
    return NULL; 
} 

void* cliente(void* arg) 
{ 
    fprintf(stderr,"Inizio codice cliente\n"); 
    fprintf(stderr,"Fine codice cliente\n"); 
    return NULL; 
} 

int main(int argc, char* argv[]) 
{ 
    void* (*routine)(void*); 
    routine=cuoco; 
    pthread_t thread_cuoco,thread_cameriere,thread_cliente; 
    pthread_create(&thread_cuoco,NULL,routine,NULL); 
    return 0; 
} 

Y en las opciones del compilador inserto -lpthread
Pero dice:
"referencia indefinida a pthread_create"
Yo uso Ubuntu 10.10 , entonces ya tengo instalada la biblioteca pthread, no puedo entender el motivo de este error.

+0

Muéstrenos cómo compila su programa. – cnicutar

+0

¿Cómo agregaste la opción del vinculador y dónde? ¿Qué versión de Code :: Blocks? –

Respuesta

28

Use -lpthread como el último indicador del compilador.

ejemplo: gcc -o sample sample.c -lpthread

+0

Ya he puesto esta opción. –

+1

@RamyAlZuhouri No, no es así. Es probable que haya estropeado la configuración de los bloques de código. +1 para contrarrestar el downvote incorrecto. – cnicutar

+0

Sí, lo he puesto. Está en configuración-> compilador y depurador-> (pestaña de configuración del compilador) -> otras opciones. –

13

Sin ver el comando del compilador, sospecho -lpthread no es al final. Las bibliotecas deben ser colocados al final del comando del compilador:

gcc main.c -lpthread

Sin embargo, en lugar de utilizar -pthread-lpthread, como -pthread pueden añadir otros parámetros (como la definición de la macro _REENTRANT por ejemplo).

+0

Lo compilo con code :: blocks, en las opciones C :: B ahora cambié _-lpthread_ con _-pthread_, pero nada ha cambiado. Esta es la única opción que tengo en la configuración. –

+0

No estoy familiarizado con code :: blocks, pero ¿puede intentar una reconstrucción completa de la fuente? – hmjd

4

Use este comando:

gcc -o -pthread main.c principal

-2

conocer los tipos de soluciones: D sólo tiene que ir a la configuración del compilador >> >> >> pestaña enlazador añadir lib ir a unidad e ir a la carpeta lib y encontrar "x86_64_linux_gnu" y encontrar "pthread" disfrutar :)

0

En Eclipse, debe agregar cadena pthread.

Proyecto -> Propiedades -> C/C++ Build -> Configuración -> Herramienta de configuración -> GCC Enlazador -> Bibliotecas -> Bibliotecas (-l) -> Añadir -> pthread

Después de esto genere el proyecto .

+1

Pero el OP dijo en un comentario que está usando Code :: Blocks, no Eclipse. –