2010-04-21 13 views
10

Sto utilizzando pthread.h in un file *.cc. quando provo ad usare pthread_exit(0); o pthread_join(mythrds[yy],NULL); si dice:Utilizzo di pthread in C++

.cc:(.text+0x3e): undefined reference to `pthread_exit' 

quando rispettato il codice molto simile in un file *.c con gcc funziona perfetto. Come posso usare pthread di in C++ .. (Ho anche aggiunto -lpthread)

.. 
void *myThreads (void *ptr) 
{ 
... 
pthread_exit(0); 
} 
.. 

bandiere:

g++ -lpthread -Wall -static -W -O9 -funroll-all-loops -finline -ffast-math 

risposta

21

Si potrebbe provare a utilizzare l'opzione -pthread per g ++.

-pthread 
     Adds support for multithreading with the pthreads library. This 
     option sets flags for both the preprocessor and linker. 
+0

grazie mille, mi è stato di grande aiuto. Pensavo che -lpthread stesse facendo lo stesso pensiero ma non lo è. – ogzylz

+0

Puoi scoprire che cosa -pthread fa sulla tua piattaforma usando 'gcc -dumpspecs' e cerco cose che iniziano '% {pthread' – Flexo

+0

L'opzione '-lpthread' include solo la libreria pthread. Potrebbe non essere sufficiente sulla tua piattaforma per ottenere supporto per pthreads. –

1

Fate il vostro file header pthread hanno extern "C" { ... } intorno ai prototipi di funzione? Questo è il solito caso in cui il linker non è in grado di collegarsi in C++.

Si verifica perché il C++ generalmente esegue il manomissione dei nomi in modo che possa codificare i dettagli dei parametri in simboli (consentendo il polimorfismo). Ad esempio, le funzioni:

void x(int); 
void x(void); 
void x(char,int,float,double); 

hanno tutti simboli di linker diversi.

Se i file di intestazione non hanno la extern "C" { ... }, potrebbe essere necessario farlo da soli:

extern "C" { 
    #include <pthread.h> 
} 

Speriamo che funzionerà.

+0

thnk ma il problema non era quello. – ogzylz