cc1plus: помилка: нерозпізнана опція командного рядка “-std = c ++ 11” з g ++


91

Я намагаюся скомпілювати за допомогою g++або -std=c++11або c++0xпрапорців.

Однак я отримую цю помилку

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

g ++ --версія

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 ++
stefan

2
@stefan Невірно, можливі обидва. Яку версію gnu ви використовуєте? C ++ 11 підтримується лише в> = 4.3.
antonijn

2
Біжи g++ --version. Потім розмістіть тут номер версії.
Konfle Dolex

3
Це жахливо старе. Ця версія не підтримує C ++ 11. Встановіть пізнішу версію, наприклад 4.7, для підтримки C ++ 11.
Konfle Dolex

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

@chris Вибачте, це має бути 4.7, 4.8 все ще знаходиться в розробці.
antonijn

@Antonijn, Ах, гадаю, я почекаю місяць-два. Я віддаю перевагу стабільним випускам або іншому кращому слову для цього, яке ви хочете використовувати.
chris

@chris Так. Або ви просто чекаєте, поки менеджер оновлення Linux mint вас повідомить :)
antonijn

2
@JoeCoderGuy Так, це я використовую.
antonijn

14

Посилання з веб-сайту gcc :

Функції C ++ 11 доступні як частина "основного" компілятора GCC у магістралі сховища Subversion GCC та 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 Правильно, але не для всіх.
stefan

@Antonijn: Є програмне забезпечення, яке несумісне з версіями> 4.1. Наприклад ABACUS informatik.uni-koeln.de/abacus/index.html На жаль, мені довелося скористатися ним один раз.
stefan


-4

Я також отримав ту ж помилку, компілюючи прапором -D, це виправлено, спробуйте це:

g ++ -Dstd = c ++ 11


Чому це проти? Що не так із відповіддю? Чому це не працює?
Веда,

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

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