cc1plus: errore: opzione della riga di comando non riconosciuta "-std = c ++ 11" con g ++


90

Sto provando a compilare usando g++e i flag -std=c++11o c++0x.

Tuttavia, ottengo questo errore

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

g ++ --versione

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++0xcon g ++
stefan

2
@stefan Errato, entrambi sono possibili. Quale versione di GNU stai usando? C ++ 11 è supportato solo in> = 4.3.
antonijn

2
Corri g++ --version. Quindi inserisci il numero di versione qui.
Konfle Dolex

3
È orribilmente vecchio. Quella versione non supporta C ++ 11. Installa una versione successiva come 4.7 per il supporto di C ++ 11.
Konfle Dolex

4
E 'possibile gli amministratori di sistema hanno fatto installare un compilatore in grado 11 C ++, ma non rendono quello di default. Puoi controllare quali versioni specifiche di GCC sono installate provando a completare automaticamente il comando g++-nella finestra della console.
Bart van Ingen Schenau

Risposte:


105

Visto dalla tua versione G ++, devi aggiornarlo male. C ++ 11 è disponibile solo da G ++ 4.3. La versione più recente è la 4.7.

Nelle versioni precedenti a G ++ 4.7, dovrai usare -std=c++0x, per le versioni più recenti puoi usare -std=c++11.


1
4.8.0 è buono per andare o c'è una versione effettiva a marzo o qualcosa del genere?
chris

@chris mi dispiace, dovrebbe essere 4.7, 4.8 è ancora in fase di sviluppo.
antonijn

@ Antonijn, Ah, immagino che aspetterò un mese o due. Preferisco le versioni stabili, o qualunque parola migliore tu voglia usare.
chris

@chris Yeah. Oppure aspettate solo che il gestore degli aggiornamenti di linux mint ti informi :)
antonijn

2
@JoeCoderGuy Sì, è quello che sto usando.
antonijn

14

Citando dal sito web di gcc :

Le funzionalità di C ++ 11 sono disponibili come parte del compilatore GCC "mainline" nel trunk del repository Subversion di GCC e in GCC 4.3 e versioni successive. Per abilitare il supporto di C ++ 0x, aggiungi il parametro della riga di comando -std = c ++ 0x alla riga di comando di g ++. Oppure, per abilitare le estensioni GNU oltre alle estensioni C ++ 0x, aggiungi -std = gnu ++ 0x alla riga di comando g ++. GCC 4.7 e versioni successive supportano anche -std = c ++ 11 e -std = gnu ++ 11.

Quindi probabilmente usi una versione di g ++ che non supporta -std=c++11. Prova -std=c++0xinvece.

La disponibilità delle funzionalità di C ++ 11 è solo per le versioni> = 4.3.


@ Antonijn Corretto, ma non un'opzione per tutti.
stefan

@ Antonijn: C'è un software che non è compatibile con le versioni> 4.1. Ad esempio ABACUS informatik.uni-koeln.de/abacus/index.html Purtroppo ho dovuto usarlo una volta.
stefan

3

dovresti provare questo

g++-4.4 -std=c++0x or g++-4.7 -std=c++0x

-4

Ho anche ricevuto lo stesso errore, la compilazione con il flag -D lo ha risolto, prova questo:

g ++ -Dstd = c ++ 11


Perché questo è downvoted? Cosa c'è di sbagliato nella risposta? Perché non funziona?
Veda

@Veda almeno per me (su gcc4.6.3), sicuramente non si stava compilando con c ++ 11. Ho scritto un semplice programma a 2 righe con std::vector<int> v = {1, 2, 3};per testare e stava lanciando tutti i tipi di errori su di esso (errori diversi rispetto a quelli senza il flag, tuttavia, abbastanza interessante).
scohe001

6
@Veda mentre questa risposta verrà compilata, molto probabilmente non fa nulla di desiderabile. L' -Dargomento della riga di comando equivale a inserire a #definenel codice sorgente. Quindi questo comando è come avere #define std c++11. Riuscite quindi a immaginare come std::stringverrà ridefinito c++11::string? Non molto utile affatto.
jwm
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.