cc1plus: error: opción de línea de comando no reconocida "-std = c ++ 11" con g ++

90

Estoy tratando de compilar usando g++y las banderas -std=c++11o c++0x.

Sin embargo, obtengo este error

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

g ++ --versión

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.

fuente
5
es -std=c++0xcon g ++
stefan
2
@stefan Incorrecto, ambos son posibles. ¿Qué versión de GNU estás usando? C ++ 11 solo se admite en> = 4.3.
Antonijn
2
Corre g++ --version. Luego publique el número de versión aquí.
Konfle Dolex
3
Eso es horriblemente viejo. Esa versión no es compatible con C ++ 11. Instale una versión posterior como 4.7 para compatibilidad con C ++ 11.
Konfle Dolex
4
Es posible que los administradores de sistemas hicieron instalar un compilador de C ++ 11 capaz, pero no lo hacen el uno por defecto. Puede verificar qué versiones específicas de GCC están instaladas al intentar completar automáticamente el comando g++-en la ventana de su consola.
Bart van Ingen Schenau

Respuestas:

105

Viendo desde su versión de G ++, necesita actualizarlo mal. C ++ 11 solo ha estado disponible desde G ++ 4.3. La versión más reciente es la 4.7.

En versiones anteriores a G ++ 4.7, tendrá que usar -std=c++0x, para versiones más recientes que puede usar -std=c++11.

antonijn
fuente
1
¿4.8.0 está listo para comenzar, o hay un lanzamiento real en marzo o algo así?
chris
@chris Lo siento, debería ser 4.7, 4.8 aún está en desarrollo.
Antonijn
@Antonijn, Ah, supongo que esperaré uno o dos meses. Prefiero las versiones estables, o cualquier palabra mejor que quieras usar.
chris
@chris Sí. O simplemente espere a que el administrador de actualizaciones de Linux
Mint
2
@JoeCoderGuy Sí, ese es el que estoy usando.
Antonijn
14

Citando del sitio web de gcc :

Las funciones de C ++ 11 están disponibles como parte del compilador GCC "principal" en el tronco del repositorio Subversion de GCC y en GCC 4.3 y posteriores. Para habilitar la compatibilidad con C ++ 0x, agregue el parámetro de línea de comando -std = c ++ 0x a su línea de comando g ++. O, para habilitar extensiones GNU además de extensiones C ++ 0x, agregue -std = gnu ++ 0x a su línea de comando g ++. GCC 4.7 y versiones posteriores también admiten -std = c ++ 11 y -std = gnu ++ 11.

Entonces, probablemente use una versión de g ++ que no es compatible con -std=c++11. Tratar-std=c++0x lugar.

La disponibilidad de las funciones de C ++ 11 es solo para las versiones> = 4.3.

stefan
fuente
@Antonijn Correcto, pero no es una opción para todos.
stefan
@Antonijn: Hay software que es incompatible con las versiones> 4.1. Por ejemplo, ABACUS informatik.uni-koeln.de/abacus/index.html Lamentablemente tuve que usarlo una vez.
stefan
3

deberías probar esto

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

También obtuve el mismo error, compilando con el indicador -D lo solucionó, intente esto:

g ++ -Dstd = c ++ 11

pankaj kushwaha
fuente
¿Por qué se vota negativamente? ¿Qué hay de malo en la respuesta? ¿Por qué no funciona esto?
Veda
@Veda para mí al menos (en gcc4.6.3), definitivamente no estaba compilando con c ++ 11. Escribí un programa simple de 2 líneas std::vector<int> v = {1, 2, 3};para probar y arrojaba todo tipo de errores sobre él (errores diferentes que sin la bandera, aunque, curiosamente).
scohe001
6
@Veda, aunque esta respuesta se compilará, es muy probable que no haga nada deseable. El -Dargumento de la línea de comando es equivalente a insertar un #defineen su código fuente. Entonces este comando es como tener #define std c++11. ¿Te imaginas entonces cómo std::stringse redefinirá c++11::string? No es muy útil en absoluto.
jwm