cc1plus: ошибка: нераспознанный параметр командной строки «-std = c ++ 11» с g ++


91

Я пытаюсь скомпилировать, используя g++и флаги -std=c++11или c++0x.

Однако я получаю эту ошибку

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++0xс g ++
стефан

2
@stefan Неправильно, возможны оба варианта. Какую версию GNU вы используете? C ++ 11 поддерживается только в версии> = 4.3.
antonijn 03

2
Беги g++ --version. Затем разместите номер версии здесь.
Konfle Dolex 03

3
Это ужасно старо. Эта версия не поддерживает C ++ 11. Установите более позднюю версию, например 4.7, для поддержки C ++ 11.
Konfle Dolex 03

4
Вполне возможно , что сисадмины сделали установить C ++ 11 , способного компилятора, но не сделали это один по умолчанию. Вы можете проверить, какие именно версии GCC установлены, попытавшись автозаполнить команду g++-в окне консоли.
Барт ван Инген Шенау

Ответы:


105

Судя по вашей версии G ++, вам нужно ее сильно обновить. C ++ 11 доступен только с G ++ 4.3. Самая последняя версия - 4.7.

В версиях до G ++ 4.7 вам придется использовать -std=c++0x, для более поздних версий вы можете использовать -std=c++11.


1
Похоже, что 4.8.0 готово, или в марте будет релиз?
Крис

@chris Извините, он должен быть 4.7, 4.8 все еще в разработке.
antonijn 03

@Antonijn, А, думаю, я подожду месяц-другой. Я предпочитаю стабильные выпуски или любое другое лучшее слово, которое вы хотите использовать.
Крис

@chris Ага. Или вы просто ждете, пока менеджер обновлений linux mint сообщит вам :)
antonijn

2
@JoeCoderGuy Ага, это тот, который я использую.
antonijn 03

14

Цитата с сайта gcc :

Функции C ++ 11 доступны как часть «основного» компилятора GCC в основной части репозитория GCC Subversion, а также в GCC 4.3 и новее. Чтобы включить поддержку C ++ 0x, добавьте параметр командной строки -std = c ++ 0x в командную строку g ++. Или, чтобы включить расширения GNU в дополнение к расширениям C ++ 0x, добавьте -std = gnu ++ 0x в командную строку g ++. GCC 4.7 и более поздние версии также поддерживают -std = c ++ 11 и -std = gnu ++ 11.

Вероятно, вы используете версию g ++, которая не поддерживает -std=c++11. Попробуйте -std=c++0xвместо этого.

Функции C ++ 11 доступны только для версий> = 4.3.


@Antonijn Верно, но вариант не для всех.
Стефан

@Antonijn: Есть программное обеспечение, несовместимое с версиями> 4.1. Например, ABACUS informatik.uni-koeln.de/abacus/index.html К сожалению, мне однажды пришлось его использовать.
Стефан


-4

У меня также была такая же ошибка, при компиляции с флагом -D она была исправлена. Попробуйте следующее:

g ++ -Dstd = c ++ 11


Почему это отклонено? Что не так с ответом? Почему это не работает?
Veda

@Veda для меня, по крайней мере (на gcc4.6.3), он определенно не компилировался с c ++ 11. Я написал простую двухстрочную программу std::vector<int> v = {1, 2, 3};для тестирования, и она выдавала всевозможные ошибки (хотя и другие ошибки, чем без флага, что довольно интересно).
scohe001

6
@Veda, пока этот ответ будет компилироваться, скорее всего, он ничего не сделает. -DАргумент командной строки эквивалентно вставки #defineв исходном коде. Итак, эта команда похожа на наличие #define std c++11. Можете ли вы тогда представить, как std::stringэто будет переопределено c++11::string? Совсем не очень полезно.
jwm
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.