2012-03-21 24 views
7

ho questo codice:undefined reference to 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; 
} 

E nelle opzioni del compilatore inserisco -lpthread
ma dice:
"undefined reference to pthread_create"
io uso ubuntu 10.10 , quindi ho già installato la libreria pthread, non riesco a capire il motivo di questo errore.

+0

Mostraci come si compila il programma. – cnicutar

+0

Come hai aggiunto l'opzione linker e dove? Quale versione di Code :: Blocks? –

risposta

28

Utilizzare -lpthread come l'ultimo flag del compilatore.

esempio: gcc -o sample sample.c -lpthread

+0

Ho già messo questa opzione. –

+1

@RamyAlZuhouri No non lo fai. Probabilmente hai bloccato le impostazioni dei blocchi di codice. +1 per contrastare downvote errato. – cnicutar

+0

Sì, l'ho messo. È su impostazioni-> compilatore e debugger -> (scheda impostazioni del compilatore) -> altre opzioni. –

13

Senza vedere il comando del compilatore, ho il sospetto -lpthread non è alla fine. Le biblioteche devono essere poste alla fine del comando del compilatore:

gcc main.c -lpthread

Tuttavia, utilizzare -pthread invece di -lpthread, come -pthread possono aggiungere altre impostazioni (come la definizione della macro _REENTRANT per esempio).

+0

Lo compilo con i blocchi code ::, nelle opzioni C :: B ora ho cambiato _-lpthread_ con _-pthread_, ma nulla è cambiato. Questa è l'unica opzione che ho nelle impostazioni. –

+0

Non ho dimestichezza con i blocchi code ::, ma puoi provare a ricostruire completamente la fonte? – hmjd

4

Utilizzare questo comando:

gcc -o -pthread main.c principale

-2

trovato i ragazzi soluzione: D basta andare su Impostazioni >> >> compilatore scheda linker >> aggiungere lib andare guida e vai alla cartella lib e trova "x86_64_linux_gnu" e trova "pthread" divertiti :)

0

In Eclipse, è necessario aggiungere pthread di stringa.

Progetto -> Proprietà -> C/C++ Build -> Impostazioni -> Impostazioni strumento -> GCC Linker -> Biblioteche -> Biblioteche (-l) -> Aggiungi -> pthread

Dopo questo Costruisci il tuo progetto .

+1

Ma l'OP ha detto in un commento che sta usando Code :: Blocks, non Eclipse. –

Problemi correlati