cc1plus: błąd: nierozpoznana opcja wiersza poleceń „-std = c ++ 11” z g ++

91

Próbuję skompilować przy użyciu g++i flag -std=c++11lub c++0x.

Jednak pojawia się ten błąd

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.

źródło
5
jest -std=c++0xz g ++
stefan
2
@stefan Niepoprawnie, oba są możliwe. Której wersji GNU używasz? C ++ 11 jest obsługiwany tylko w> = 4.3.
antonijn,
2
Biegnij g++ --version. Następnie opublikuj tutaj numer wersji.
Konfle Dolex
3
To strasznie stare. Ta wersja nie obsługuje C ++ 11. Zainstaluj nowszą wersję, taką jak 4.7, aby obsługiwać język C ++ 11.
Konfle Dolex
4
Możliwe jest, że administratorzy nie zainstalować c ++ 11 zdolną kompilatora, ale nie sprawiają, że jest to jedna domyślna. Możesz sprawdzić, które konkretne wersje GCC są zainstalowane, próbując automatycznie uzupełnić polecenie g++-w oknie konsoli.
Bart van Ingen Schenau

Odpowiedzi:

105

Widząc z wersji G ++, musisz ją źle zaktualizować. C ++ 11 był dostępny dopiero od wersji G ++ 4.3. Najnowsza wersja to 4.7.

W wersjach wcześniejszych niż G ++ 4.7 będziesz musiał użyć -std=c++0x, dla nowszych wersji możesz użyć -std=c++11.

antonijn
źródło
1
Czy 4.8.0 jest jak dobry na wynos, czy jest rzeczywiste wydanie w marcu czy coś takiego?
chris
@chris Przepraszam, powinno być 4.7, 4.8 jest wciąż w fazie rozwoju.
antonijn,
@Antonijn, Ach, chyba poczekam miesiąc lub dwa. Wolę stabilne wydania lub jakiekolwiek lepsze określenie, którego chcesz użyć.
chris
@chris Yeah. Albo po prostu poczekaj, aż menedżer aktualizacji Linux Mint Cię poinformuje :)
antonijn
2
@JoeCoderGuy Tak, to ten, którego używam.
antonijn,
14

Cytowanie ze strony internetowej gcc :

Funkcje C ++ 11 są dostępne jako część „głównego” kompilatora GCC w pniu repozytorium GCC Subversion oraz w GCC 4.3 i nowszych. Aby włączyć obsługę C ++ 0x, dodaj parametr wiersza poleceń -std = c ++ 0x do wiersza poleceń g ++. Lub, aby włączyć rozszerzenia GNU oprócz rozszerzeń C ++ 0x, dodaj -std = gnu ++ 0x do wiersza poleceń g ++. GCC 4.7 i nowsze obsługują również -std = c ++ 11 i -std = gnu ++ 11.

Więc prawdopodobnie używasz wersji g ++, która nie obsługuje -std=c++11. Spróbuj -std=c++0xzamiast tego.

Dostępność funkcji C ++ 11 dotyczy tylko wersji> = 4.3.

stefan
źródło
@Antonijn Dobrze, ale nie jest to opcja dla każdego.
stefan
@Antonijn: Istnieje oprogramowanie, które jest niekompatybilne z wersjami> 4.1. Np. ABACUS informatik.uni-koeln.de/abacus/index.html Niestety musiałem go raz użyć.
stefan
3

powinieneś tego spróbować

g++-4.4 -std=c++0x or g++-4.7 -std=c++0x
papo
źródło
-4

Mam również ten sam błąd, kompilacja z flagą -D naprawiła go, spróbuj tego:

g ++ -Dstd = c ++ 11

pankaj kushwaha
źródło
Dlaczego jest to odrzucane? Co jest nie tak z odpowiedzią? Dlaczego to nie działa?
Weda
Przynajmniej dla mnie @Veda (na gcc4.6.3), zdecydowanie nie kompilował się z C ++ 11. Napisałem prosty dwuwierszowy program std::vector<int> v = {1, 2, 3};do testowania i rzucał na niego różnego rodzaju błędy (inne błędy niż bez flagi, co ciekawe).
scohe001
6
@Veda Chociaż ta odpowiedź będzie się kompilować, najprawdopodobniej nie zrobi nic pożądanego. -DArgument wiersza poleceń jest równoważna wstawiając #definew kodzie źródłowym. Więc to polecenie jest jak posiadanie #define std c++11. Czy możesz sobie wyobrazić, jak std::stringzostanie przedefiniowana c++11::string? Niezbyt przydatne.
jwm