cc1plus: erro: opção de linha de comando não reconhecida “-std = c ++ 11” com g ++

90

Estou tentando compilar usando g++e os sinalizadores -std=c++11ou c++0x.

No entanto, recebo este erro

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.

fonte
5
é -std=c++0xcom g ++
stefan
2
@stefan Incorreto, ambos são possíveis. Qual versão GNU você está usando? C ++ 11 é suportado apenas em> = 4.3.
antonijn
2
Corra g++ --version. Em seguida, coloque o número da versão aqui.
Konfle Dolex
3
Isso é terrivelmente antigo. Essa versão não é compatível com C ++ 11. Instale uma versão posterior como 4.7 para suporte C ++ 11.
Konfle Dolex
4
É possível que os administradores fizeram instalar um C ++ 11 compilador capaz, mas não torná-lo o padrão. Você pode verificar quais versões específicas do GCC estão instaladas tentando completar automaticamente o comando g++-na janela do console.
Bart van Ingen Schenau

Respostas:

105

Vendo de sua versão G ++, você precisa atualizá-lo mal. C ++ 11 só está disponível a partir do G ++ 4.3. A versão mais recente é 4.7.

Em versões pré-G ++ 4.7, você terá que usar -std=c++0x, para versões mais recentes você pode usar -std=c++11.

antonijn
fonte
1
O 4.8.0 está pronto para ir ou há um lançamento real em março ou algo assim?
Chris
@chris, desculpe, deveria ser 4.7, 4.8 ainda está em desenvolvimento.
antonijn
@Antonijn, Ah, acho que vou esperar um mês ou dois. Eu prefiro as versões estáveis, ou qualquer palavra melhor para isso que você queira usar.
Chris
@chris Sim. Ou você apenas espera que o gerenciador de atualização do linux mint o informe :)
antonijn
2
@JoeCoderGuy Sim, é o que estou usando.
antonijn
14

Citando do site do gcc :

Os recursos do C ++ 11 estão disponíveis como parte do compilador GCC "principal" no tronco do repositório Subversion do GCC e no GCC 4.3 e posterior. Para ativar o suporte a C ++ 0x, adicione o parâmetro de linha de comando -std = c ++ 0x à sua linha de comando g ++. Ou, para ativar as extensões GNU além das extensões C ++ 0x, adicione -std = gnu ++ 0x à linha de comando g ++. GCC 4.7 e posterior suportam -std = c ++ 11 e -std = gnu ++ 11 também.

Portanto, provavelmente você usa uma versão do g ++ que não é compatível -std=c++11. Em -std=c++0xvez disso, tente .

A disponibilidade de recursos do C ++ 11 é para versões> = 4.3 apenas.

Stefan
fonte
@Antonijn Correto, mas não é uma opção para todos.
stefan
@Antonijn: Existe software que é incompatível com as versões> 4.1. Por exemplo, ABACUS informatik.uni-koeln.de/abacus/index.html Infelizmente, tive que usá-lo uma vez.
stefan
3

você deveria tentar isso

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

Também recebi o mesmo erro, ao compilar com a sinalização -D corrigiu-o, tente isto:

g ++ -Dstd = c ++ 11

pankaj kushwaha
fonte
Por que isso foi rejeitado? O que há de errado com a resposta? Por que isso não funciona?
Veda
@Veda, pelo menos para mim (em gcc4.6.3), definitivamente não estava compilando com c ++ 11. Eu escrevi um programa simples de 2 linhas com std::vector<int> v = {1, 2, 3};to test e ele estava lançando todos os tipos de erros sobre ele (erros diferentes dos sem a bandeira, curiosamente).
scohe001
6
@Veda enquanto esta resposta compila, muito provavelmente não faz nada desejável. O -Dargumento da linha de comando é equivalente a inserir um #defineem seu código-fonte. Portanto, este comando é como ter #define std c++11. Você pode imaginar como std::stringserá redefinido para c++11::string? Não é muito útil.
jwm