cc1plus: erreur: option de ligne de commande non reconnue «-std = c ++ 11» avec g ++

90

J'essaie de compiler en utilisant g++et les indicateurs -std=c++11ou c++0x.

Cependant, j'obtiens cette erreur

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.

la source
5
it's -std=c++0xwith g ++
stefan
2
@stefan Incorrect, les deux sont possibles. Quelle version de GNU utilisez-vous? C ++ 11 n'est pris en charge que dans> = 4.3.
antonijn le
2
Courez g++ --version. Ensuite, publiez le numéro de version ici.
Konfle Dolex
3
C'est horriblement vieux. Cette version ne prend pas en charge C ++ 11. Installez une version ultérieure comme 4.7 pour la prise en charge de C ++ 11.
Konfle Dolex
4
Il est possible que les administrateurs système aient installé un compilateur compatible C ++ 11, mais ne l'ont pas fait par défaut. Vous pouvez vérifier quelles versions spécifiques de GCC sont installées en essayant de compléter automatiquement la commande g++-dans la fenêtre de votre console.
Bart van Ingen Schenau

Réponses:

105

À partir de votre version G ++, vous devez la mettre à jour mal. C ++ 11 n'est disponible que depuis G ++ 4.3. La version la plus récente est la 4.7.

Dans les versions antérieures à G ++ 4.7, vous devrez utiliser -std=c++0x, pour les versions plus récentes que vous pouvez utiliser -std=c++11.

Antonijn
la source
1
La version 4.8.0 est-elle prête à l'emploi, ou existe-t-il une version réelle en mars ou quelque chose du genre?
chris
@chris Je suis désolé, il devrait être 4.7, 4.8 est encore en développement.
antonijn
@Antonijn, Ah, je suppose que je vais attendre un mois ou deux. Je préfère les versions stables, ou tout autre mot que vous souhaitez utiliser.
chris
@chris Ouais. Ou vous attendez simplement que le gestionnaire de mise à jour linux mint vous informe :)
antonijn
2
@JoeCoderGuy Oui, c'est celui que j'utilise.
antonijn le
14

Citant le site Web de gcc :

Les fonctionnalités de C ++ 11 sont disponibles dans le cadre du compilateur GCC "principal" dans le coffre du dépôt Subversion de GCC et dans GCC 4.3 et versions ultérieures. Pour activer la prise en charge de C ++ 0x, ajoutez le paramètre de ligne de commande -std = c ++ 0x à votre ligne de commande g ++. Ou, pour activer les extensions GNU en plus des extensions C ++ 0x, ajoutez -std = gnu ++ 0x à votre ligne de commande g ++. GCC 4.7 et versions ultérieures prennent également en charge -std = c ++ 11 et -std = gnu ++ 11.

Vous utilisez donc probablement une version de g ++ qui ne prend pas en charge -std=c++11. Essayez à la -std=c++0xplace.

La disponibilité des fonctionnalités de C ++ 11 concerne uniquement les versions> = 4.3.

Stefan
la source
@Antonijn Correct, mais pas une option pour tout le monde.
stefan
@Antonijn: Il existe un logiciel incompatible avec les versions> 4.1. Par exemple ABACUS informatik.uni-koeln.de/abacus/index.html Malheureusement, j'ai dû l'utiliser une fois.
stefan
3

tu devrais essayer ça

g++-4.4 -std=c++0x or g++-4.7 -std=c++0x
papo
la source
-4

J'ai également eu la même erreur, la compilation avec le drapeau -D l'a corrigé, essayez ceci:

g ++ -Dstd = c ++ 11

pankaj kushwaha
la source
Pourquoi ce vote est-il défavorable? Quel est le problème avec la réponse? Pourquoi ça ne marche pas?
Veda
@Veda pour moi du moins (sur gcc4.6.3), ce n'était certainement pas une compilation avec c ++ 11. J'ai écrit un programme simple de 2 lignes avec std::vector<int> v = {1, 2, 3};pour tester et il jetait toutes sortes d'erreurs dessus (erreurs différentes de celles sans le drapeau, assez intéressant).
scohe001
6
@Veda tandis que cette réponse sera compilée, elle ne fait probablement rien de souhaitable. L' -Dargument de ligne de commande équivaut à insérer un #definedans votre code source. Donc, cette commande est comme avoir #define std c++11. Pouvez-vous imaginer comment std::stringsera redéfini c++11::string? Pas très utile du tout.
jwm