cc1plus: Fehler: Nicht erkannte Befehlszeilenoption "-std = c ++ 11" mit g ++

90

Ich versuche mit g++und entweder den Flags -std=c++11oder zu kompilieren c++0x.

Ich erhalte jedoch diesen Fehler

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

g ++ --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.

quelle
5
es ist -std=c++0xmit g ++
stefan
2
@stefan Falsch, beide sind möglich. Welche Gnu-Version verwenden Sie? C ++ 11 wird nur in> = 4.3 unterstützt.
Antonijn
2
Ausführen g++ --version. Dann geben Sie hier die Versionsnummer ein.
Konfle Dolex
3
Das ist schrecklich alt. Diese Version unterstützt C ++ 11 nicht. Installieren Sie eine spätere Version wie 4.7 für C ++ 11-Unterstützung.
Konfle Dolex
4
Es ist möglich , die Systemadministratoren haben einen C ++ installieren 11 fähig Compiler, aber hätte es nicht den Standard machen. Sie können überprüfen, welche spezifischen Versionen von GCC installiert sind, indem Sie versuchen, den Befehl g++-in Ihrem Konsolenfenster automatisch zu vervollständigen .
Bart van Ingen Schenau

Antworten:

105

Aus Ihrer G ++ - Version geht hervor, dass Sie sie dringend aktualisieren müssen. C ++ 11 ist erst seit G ++ 4.3 verfügbar. Die neueste Version ist 4.7.

In Versionen vor G ++ 4.7 müssen Sie -std=c++0xfür neuere Versionen verwenden, die Sie verwenden können -std=c++11.

antonijn
quelle
1
Ist 4.8.0 gut oder gibt es eine aktuelle Veröffentlichung im März oder so?
Chris
@chris Es tut mir leid, es sollte 4.7 sein, 4.8 ist noch in der Entwicklung.
Antonijn
@ Antonijn, Ah, ich schätze, ich werde ein oder zwei Monate warten. Ich bevorzuge die stabilen Releases oder was auch immer für ein besseres Wort dafür Sie verwenden möchten.
Chris
@chris Ja. Oder warten Sie einfach, bis der Linux Mint Update Manager Sie informiert :)
antonijn
2
@ JoeCoderGuy Ja, das ist der, den ich benutze.
Antonijn
14

Zitat von der gcc-Website :

C ++ 11-Funktionen sind als Teil des GCC-Compilers "mainline" im Trunk des Subversion-Repositorys von GCC und in GCC 4.3 und höher verfügbar. Um die C ++ 0x-Unterstützung zu aktivieren, fügen Sie der g ++ - Befehlszeile den Befehlszeilenparameter -std = c ++ 0x hinzu. Um GNU-Erweiterungen zusätzlich zu C ++ 0x-Erweiterungen zu aktivieren, fügen Sie Ihrer g ++ - Befehlszeile -std = gnu ++ 0x hinzu. GCC 4.7 und höher unterstützen auch -std = c ++ 11 und -std = gnu ++ 11.

Wahrscheinlich verwenden Sie eine Version von g ++, die nicht unterstützt wird -std=c++11. Versuchen-std=c++0x stattdessen.

Die Verfügbarkeit von C ++ 11-Funktionen gilt nur für Versionen> = 4.3.

stefan
quelle
@Antonijn Richtig, aber nicht für jeden eine Option.
Stefan
@Antonijn: Es gibt Software, die mit Versionen> 4.1 nicht kompatibel ist. ZB ABACUS informatik.uni-koeln.de/abacus/index.html Leider musste ich es einmal verwenden.
Stefan
3

Sie sollten dies versuchen

g++-4.4 -std=c++0x or g++-4.7 -std=c++0x
Papo
quelle
-4

Ich habe auch den gleichen Fehler bekommen, Kompilieren mit -D Flag behoben. Versuchen Sie Folgendes:

g ++ -Dstd = c ++ 11

pankaj kushwaha
quelle
Warum wird das abgelehnt? Was ist los mit der Antwort? Warum funktioniert das nicht?
Veda
@Veda zumindest für mich (auf gcc4.6.3), es wurde definitiv nicht mit c ++ 11 kompiliert. Ich habe ein einfaches 2-Zeilen-Programm std::vector<int> v = {1, 2, 3};zum Testen geschrieben und es hat alle möglichen Fehler darüber geworfen (interessanterweise andere Fehler als ohne Flag).
scohe001
6
@Veda Während diese Antwort kompiliert wird, macht sie höchstwahrscheinlich nichts Wünschenswertes. Das -DBefehlszeilenargument entspricht dem Einfügen eines #definein Ihren Quellcode. Dieser Befehl ist also wie mit #define std c++11. Können Sie sich dann vorstellen, wie std::stringes neu definiert wird c++11::string? Überhaupt nicht sehr nützlich.
JWM