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.

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.


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.


@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

-4

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

g ++ -Dstd = c ++ 11


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.