cc1plus: ข้อผิดพลาด: ไม่รู้จักตัวเลือกบรรทัดคำสั่ง“ -std = c ++ 11” พร้อม g ++


92

ฉันกำลังพยายามรวบรวมโดยใช้g++และแฟล็ก-std=c++11หรือc++0x

อย่างไรก็ตามฉันได้รับข้อผิดพลาดนี้

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

g ++ - รุ่น

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กับ g ++
stefan

2
@stefan ไม่ถูกต้องทั้งสองอย่างเป็นไปได้ คุณใช้ gnu เวอร์ชั่นไหน C ++ 11 รองรับเฉพาะใน> = 4.3
antonijn

2
g++ --versionวิ่ง จากนั้นโพสต์หมายเลขเวอร์ชันที่นี่
Konfle Dolex

3
มันเก่ามาก เวอร์ชันนั้นไม่รองรับ C ++ 11 ติดตั้งเวอร์ชันที่ใหม่กว่าเช่น 4.7 สำหรับการรองรับ C ++ 11
Konfle Dolex

4
เป็นไปได้ว่าผู้ดูแลระบบได้ติดตั้งคอมไพเลอร์ที่มีความสามารถ C ++ 11 แต่ไม่ได้ทำให้เป็นคอมไพเลอร์เริ่มต้น คุณสามารถตรวจสอบว่า GCC เวอร์ชันใดได้รับการติดตั้งโดยพยายามเติมคำสั่งอัตโนมัติg++-ในหน้าต่างคอนโซลของคุณ
Bart van Ingen Schenau

คำตอบ:


105

เห็นจากเวอร์ชัน G ++ ของคุณแล้วคุณต้องอัปเดตไม่ดี C ++ 11 มีให้ตั้งแต่ G ++ 4.3 เท่านั้น เวอร์ชันล่าสุดคือ 4.7

ในเวอร์ชันก่อน G ++ 4.7 คุณจะต้องใช้-std=c++0xสำหรับเวอร์ชันล่าสุดที่คุณสามารถ-std=c++11ใช้ได้


1
4.8.0 เป็นไปด้วยดีหรือมีการเปิดตัวจริงในเดือนมีนาคมหรืออะไร?
chris

@chris ขอโทษด้วยน่าจะเป็น 4.7, 4.8 ยังอยู่ระหว่างการพัฒนา
antonijn

@Antonijn อาเดาว่าฉันจะรอสักเดือนหรือสองเดือน ฉันชอบรุ่นที่มีเสถียรภาพหรือคำที่ดีกว่าสำหรับมันที่คุณต้องการใช้
chris

@chris เย้. หรือคุณเพียงแค่รอให้ตัวจัดการการอัปเดต linux mint แจ้งให้คุณทราบ :)
antonijn

2
@JoeCoderGuy ใช่นั่นคือสิ่งที่ฉันใช้
antonijn

14

อ้างจากเว็บไซต์ gcc :

คุณลักษณะ C ++ 11 พร้อมใช้งานเป็นส่วนหนึ่งของคอมไพเลอร์ GCC "mainline" ในส่วนท้ายของที่เก็บ Subversion ของ GCC และใน GCC 4.3 และใหม่กว่า ในการเปิดใช้งานการสนับสนุน C ++ 0x ให้เพิ่มพารามิเตอร์บรรทัดคำสั่ง -std = c ++ 0x ในบรรทัดคำสั่ง g ++ ของคุณ หรือหากต้องการเปิดใช้งานส่วนขยาย GNU นอกเหนือจากส่วนขยาย C ++ 0x ให้เพิ่ม -std = gnu ++ 0x ในบรรทัดคำสั่ง g ++ ของคุณ GCC 4.7 และใหม่กว่ารองรับ -std = c ++ 11 และ -std = gnu ++ 11 เช่นกัน

ดังนั้นอาจจะใช้รุ่นของกรัม ++ -std=c++11ที่ไม่สนับสนุน ลอง-std=c++0xแทน

ความพร้อมใช้งานของคุณสมบัติ C ++ 11 สำหรับเวอร์ชัน> = 4.3 เท่านั้น


@Antonijn ถูกต้อง แต่ไม่ใช่ตัวเลือกสำหรับทุกคน
stefan

@Antonijn: มีซอฟต์แวร์ที่เข้ากันไม่ได้กับเวอร์ชัน> 4.1 เช่น ABACUS informatik.uni-koeln.de/abacus/index.htmlน่าเสียดายที่ฉันต้องใช้ครั้งเดียว
stefan


-4

ฉันยังได้รับข้อผิดพลาดเดียวกันการคอมไพล์ด้วยแฟล็ก -D แก้ไขแล้วลองสิ่งนี้:

g ++ -Dstd = c ++ 11


เหตุใดจึงลดลง คำตอบผิดอะไร ทำไมถึงไม่ทำงาน
Veda

อย่างน้อย @Veda สำหรับฉัน (บน gcc4.6.3) มันไม่ได้รวบรวมด้วย c ++ 11 อย่างแน่นอน ฉันเขียนโปรแกรม 2 บรรทัดง่ายๆstd::vector<int> v = {1, 2, 3};เพื่อทดสอบและมันก็โยนข้อผิดพลาดทุกประเภทไป (ข้อผิดพลาดต่างจากที่ไม่มีแฟล็ก แต่น่าสนใจพอสมควร)
scohe001

6
@Veda ในขณะที่คำตอบนี้จะรวบรวม แต่ก็ไม่ได้ทำอะไรที่ต้องการ -Dอาร์กิวเมนต์บรรทัดคำสั่งเทียบเท่ากับการใส่#defineในรหัสที่มาของคุณ #define std c++11ดังนั้นคำสั่งนี้เหมือนมี ถ้าอย่างนั้นคุณลองนึกดูว่าstd::stringจะถูกกำหนดใหม่c++11::stringอย่างไร? ไม่ค่อยมีประโยชน์เลย
jwm
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.