cc1plus: त्रुटि: गैर-मान्यताप्राप्त कमांड लाइन विकल्प "-std = c ++ 11" जी ++ के साथ


90

मैं g++या तो -std=c++11या c++0xझंडे का उपयोग कर संकलन करने की कोशिश कर रहा हूं ।

हालाँकि, मुझे यह त्रुटि मिली

cc1plus: error: unrecognized command line option "-std=c++11"

जी ++ --version

g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-54)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

5
यह -std=c++0xजी ++ के साथ है
स्टीफन

2
@stefan गलत, दोनों संभव हैं। आप किस गन्नू संस्करण का उपयोग कर रहे हैं? C ++ 11 केवल> = 4.3 में समर्थित है।
एंटोनीज

2
दौड़ो g++ --version। इसके बाद यहां वर्जन नंबर पोस्ट करें।
कोनफल डोलेक्स

3
वह बहुत पुराना है। वह संस्करण C ++ 11 का समर्थन नहीं करता है। C ++ 11 समर्थन के लिए 4.7 जैसे बाद के संस्करण को स्थापित करें।
कोनफल डोलेक्स

4
यह संभव है कि सीसडमिन ने C ++ 11 सक्षम कंपाइलर स्थापित किया हो , लेकिन इसे डिफ़ॉल्ट नहीं बनाया। आप जाँच सकते हैं कि जीसीसी के कौन से विशिष्ट संस्करण g++-कंसोल विंडो में कमांड को स्वतः पूर्ण करने की कोशिश करके स्थापित किए गए हैं।
बार्ट वैन इनगेन शेनॉ

जवाबों:


105

अपने G ++ संस्करण से देखकर, आपको इसे बुरी तरह से अपडेट करने की आवश्यकता है। C ++ 11 केवल G ++ 4.3 के बाद से उपलब्ध है। सबसे हालिया संस्करण 4.7 है।

पूर्व-G ++ 4.7 के संस्करणों में, आपको -std=c++0xअधिक हाल के संस्करणों के लिए उपयोग करना होगा -std=c++11


1
क्या 4.8.0 जाना अच्छा है, या मार्च या कुछ में वास्तविक रिलीज है?
चिश

@chris मुझे खेद है, यह 4.7 होना चाहिए, 4.8 अभी भी इन-डेवलपमेंट है।
एंटोनीज

@Antonijn, आह, लगता है मैं एक या दो महीने इंतजार करूँगा। मैं स्थिर रिलीज़ पसंद करता हूं, या इसके लिए जो भी बेहतर शब्द आप उपयोग करना चाहते हैं।
चिश

@ क्रिस हाँ। या आप बस आपको सूचित करने के लिए linux टकसाल अद्यतन प्रबंधक की प्रतीक्षा करें :)
antonijn

2
@JoeCoderGuy हां, वह है जिसका मैं उपयोग कर रहा हूं।
एंटोनीज

14

जीसीसी वेबसाइट से उद्धरण :

C ++ 11 सुविधाएँ GCC के तोड़फोड़ भंडार में और GCC 4.3 और बाद के ट्रंक में "मेनलाइन" GCC कंपाइलर के भाग के रूप में उपलब्ध हैं। C ++ 0x समर्थन को सक्षम करने के लिए, कमांड लाइन पैरामीटर -std = c ++ 0x को अपने g ++ कमांड लाइन में जोड़ें। या, C ++ 0x एक्सटेंशन के अलावा GNU एक्सटेंशन को सक्षम करने के लिए, अपने g ++ कमांड लाइन में -std = gnu ++ 0x जोड़ें। GCC 4.7 और बाद में समर्थन -std = c ++ 11 और -std = gnu ++ 11 साथ ही।

तो शायद आप g ++ के संस्करण का उपयोग करते हैं जो समर्थन नहीं करता है -std=c++11-std=c++0xइसके बजाय कोशिश करें ।

C ++ 11 सुविधाओं की उपलब्धता केवल संस्करणों = = 4.3 के लिए है।


@Antonijn सही है, लेकिन सभी के लिए एक विकल्प नहीं है।
स्टीफन

@Antonijn: वहाँ सॉफ्टवेयर है जो संस्करणों के साथ असंगत है> 4.1। उदाहरण के लिए अबेकस informatik.uni-koeln.de/abacus/index.html दुर्भाग्य से पर्याप्त मैं एक बार इसका इस्तेमाल करने के लिए किया था।
स्टीफन


-4

मुझे भी वही त्रुटि मिली, -D के झंडे को संकलित करते हुए, इसे आज़माएं:

g ++ -Dstd = c ++ 11


यह क्यों ठुकराया गया है? उत्तर में गलत क्या है? यह काम क्यों नहीं करता है?
वेदा

@ मेरे लिए कम से कम (gcc4.6.3 पर), यह निश्चित रूप से सी ++ 11 के साथ संकलन नहीं कर रहा था। मैंने std::vector<int> v = {1, 2, 3};परीक्षण के साथ एक सरल 2 लाइन प्रोग्राम लिखा था और यह उस पर सभी प्रकार की त्रुटियों को फेंक रहा था (ध्वज के बिना अलग-अलग त्रुटियां, हालांकि, दिलचस्प रूप से पर्याप्त)।
scohe001

6
@ वेदा जबकि यह उत्तर संकलित करेगा, यह बहुत संभव है कि कुछ भी वांछनीय न करे। -Dकमांड लाइन तर्क एक डालने के बराबर है #defineअपने स्रोत कोड में। तो यह कमांड होने जैसा है #define std c++11। क्या आप सोच सकते हैं कि std::stringइसे कैसे फिर से परिभाषित किया जाएगा c++11::string? बहुत उपयोगी नहीं है।
jwm
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.