2010-04-21 6 views
10

में pthread का उपयोग करके मैं *.cc फ़ाइल में उपयोग कर रहा हूं। जब मैं या pthread_exit(0); इस्तेमाल करने की कोशिश pthread_join(mythrds[yy],NULL); यह कहते हैं:सी ++

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

यह सही काम करते हैं जब जीसीसी के साथ एक *.c फ़ाइल में बहुत समान कोड पालन किया है। मैं pthread C++ के .. (मैं भी -lpthread जोड़ा)

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

झंडे का उपयोग कैसे कर सकते हैं:

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

उत्तर

21

आप g ++ पर -pthread विकल्प का उपयोग करने का प्रयास कर सकते हैं।

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

बहुत कुछ thnks, यह reaaaaaaaallly मदद की। मैंने सोचा- लिपिथ एक ही सोच कर रहा था लेकिन यह नहीं है। – ogzylz

+0

आप यह पता लगा सकते हैं कि 'gcc -dumpspecs' का उपयोग करके आपके प्लेटफ़ॉर्म पर क्या-चौथाई है और '% {pthread' – Flexo

+0

'-lpthread' विकल्प शुरू करने वाली चीज़ों की तलाश में केवल पर्थ्रेड लाइब्रेरी शामिल है। यह आपके मंच पर pthreads समर्थन प्राप्त करने के लिए पर्याप्त नहीं हो सकता है। –

1

अपने pthread हेडर फाइल extern "C" { ... } समारोह प्रोटोटाइप के आसपास है? लिंकर के लिए यह सामान्य मामला सी ++ में लिंक करने में सक्षम नहीं है।

ऐसा इसलिए होता है क्योंकि सी ++ आम तौर पर नाम-मैंगलिंग करता है ताकि यह पैरामीटर विवरण को प्रतीकों (पॉलीमोर्फिज्म की अनुमति दे) में एन्कोड कर सके। उदाहरण के लिए, कार्य:

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

सभी को अलग-अलग लिंकर प्रतीकों मिलते हैं। कि काम करेंगे

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

उम्मीद है कि:

तो हेडर फाइल extern "C" { ... } नहीं है, तो आप इसे अपने आप को क्या करने की जरूरत हो सकती है।

+0

thnk लेकिन समस्या यह नहीं थी। – ogzylz