2010-03-25 35 views
15

मैंने संकलित & मैकपोर्ट का उपयोग कर gcc4.4 स्थापित किया।std :: थ्रेड त्रुटि (std का सदस्य नहीं धागा)

जब मैं का उपयोग कर संकलन करने की कोशिश -> जी ++ जी -Wall -ansi -pthread -std = C++ 0x main.cpp ...:

#include <thread> 
... 
    std::thread t(handle); 
    t.join(); 
.... 

संकलक रिटर्न:

cserver.cpp: In member function 'int CServer::run()': 
cserver.cpp:48: error: 'thread' is not a member of 'std' 
cserver.cpp:48: error: expected ';' before 't' 
cserver.cpp:49: error: 't' was not declared in this scope 

लेकिन std::cout <<... ठीक संकलित करता है ..

क्या कोई मेरी मदद कर सकता है?

+0

आप धागा शीर्षक में देखें, तो ऐसा लगता है कि वर्ग केवल परिभाषित (_GLIBCXX_HAS_GTHREADS) #if मौजूद '&& परिभाषित (_GLIBCXX_USE_C99_STDINT_TR1)' । मुझे यकीन नहीं है कि, परिभाषित करने के लिए आपको क्या करना होगा। – UncleBens

+0

@UncleBens: मेरा मानना ​​है कि उनको सीधे परिभाषित किया जाता है -pthread और -std = C++ 0x। Omitting -pthread एक seg गलती का कारण बनता है: http://gcc.gnu.org/ml/gcc-help/2009-04/msg00208.html –

+0

बस नवीनतम अपडेट: मैकपॉर्ट्स जीसीसी 4.7.0 std :: thread का समर्थन/संकलित करता है, जबकि 4.6.3 नहीं है। –

उत्तर

5

ड्रॉप -ansi, इसका मतलब है -std = C++ 98, जिसे आप स्पष्ट रूप से नहीं चाहते हैं। यह परिभाषित करने के लिए मैक्रो __STRICT_ANSI__ का भी कारण बनता है और यह हेडर के व्यवहार को बदल सकता है, उदा। सी ++ 0x समर्थन अक्षम करके।

+0

मैक्रो नाम के अंत में वास्तव में दो अंडरस्कोर हैं, लेकिन यदि मैं इसे सही तरीके से लिखता हूं तो एसओ इसे स्वरूपण के रूप में गलत व्याख्या करता है। – Tronic

+0

अच्छी तरह से इंगित किया, मैंने इसे हटा दिया, लेकिन यह अभी भी मुझे एक ही त्रुटि देता है .. मैंने gcc4.4 और gcc4.5 बीटा के साथ प्रयास किया ... यह निराशाजनक है। – luis

+0

लापता अंडरस्कोर समस्या को ठीक किया गया। –

13

जीसीसी अभी तक पूरी तरह std :: धागा का समर्थन नहीं करता: इस बीच में

http://gcc.gnu.org/projects/cxx0x.html

http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html

उपयोग boost::thread

संपादित

हालांकि संकलित और जीसीसी 4.4.3 के साथ मेरे लिए ठीक भागा निम्नलिखित:

#include <thread> 
#include <iostream> 

struct F 
{ 
    void operator()() const 
    { 
    std::cout<<"Printing from another thread"<<std::endl; 
    } 
}; 

int main() 
{ 
    F f; 
    std::thread t(f); 
    t.join(); 

    return 0; 
} 

 
g++ -Wall -g -std=c++0x -pthread main.cpp 

a.out के उत्पादन के साथ संकलित:

 
Printing from another thread 

क्या आप पूरा कोड प्रदान कर सकते हैं? हो सकता है कि ... एस में कुछ अस्पष्ट समस्या छिपी हो?

+0

मैंने आपके कोड की कोशिश की और मुझे एक ही त्रुटि मिलती है ... क्या यह ओएसएक्स संबंधित हो सकता है? या शायद कुछ ऐसा जो मैकपॉर्ट्स द्वारा जीसीसी स्थापित के साथ सही नहीं है? – luis

+1

ऐसा हो सकता है कि मैकपॉर्ट्स सी ++ 0x कार्यक्षमता का पूरी तरह से समर्थन नहीं करता है? क्या आपके पास जीसीसी कॉन्फ़िगर स्क्रिप्ट से आउटपुट है? यहां एक मैक उपयोगकर्ता है जिसके लिए कॉन्फ़िगर किया गया है कि std :: thread समर्थित नहीं है: (http://www.mail-archive.com/[email protected]/msg00973.html) –

0

ठीक है मैंने उबंटू पर जीसीसी 4.4.1 के साथ कोशिश की और यह एक आकर्षण की तरह काम करता है। समस्या मैक ओएस एक्स विशिष्ट है, अब केवल यह पता लगाने की आवश्यकता है कि क्यों ...

0

क्या आप वाकई सही कंपाइलर में खींच रहे हैं? क्या आपके पास gcc_select है?

1

मुझे मिनीजीडब्ल्यू का उपयोग कर विंडोज़ पर एक ही समस्या थी। मुझे github mingw-std-threads पर mingw.mutex.h सहित, रैपर कक्षाएं मिलीं, mingw.thread.h फ़ाइलों को वैश्विक MinGW निर्देशिका में इस समस्या को हल किया गया। सभी मैं करना था हेडर फाइल शामिल करने के लिए है और मेरे कोड रुके ही

#include "mingw.thread.h" 

... 
std::thread t(handle); 
... 
+0

इसके लिए चीयर्स। मुझे पागल कर रहा था। आपका उत्तर थोड़ा उलझन में था जहां आपने वैश्विक MinGW निर्देशिका को संदर्भित किया था। मुझे प्रोजेक्ट फ़ोल्डर में फ़ाइलों को छोड़ना पड़ा जहां अन्य सभी .h फाइलें इसे काम करने के लिए हैं ... लेकिन यह काम किया। – CoreyRS

संबंधित मुद्दे