cc1plus: error: opsi baris perintah tidak dikenal "-std = c ++ 11" dengan g ++

91

Saya mencoba untuk mengkompilasi menggunakan g++dan baik -std=c++11atau c++0xbendera.

Namun, saya mendapatkan kesalahan ini

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.

sumber
5
Ini -std=c++0xdengan g ++
Stefan
2
@stefan Salah, keduanya mungkin. Versi gnu mana yang Anda gunakan? C ++ 11 hanya didukung di> = 4.3.
antonijn
2
Lari g++ --version. Kemudian posting nomor versinya di sini.
Konfle Dolex
3
Itu sangat tua. Versi tersebut tidak mendukung C ++ 11. Instal versi yang lebih baru seperti 4.7 untuk dukungan C ++ 11.
Konfle Dolex
4
Hal ini dimungkinkan sysadmin melakukan menginstal C ++ 11 compiler mampu, tetapi tidak membuatnya satu default. Anda dapat memeriksa versi GCC tertentu yang diinstal dengan mencoba melengkapi perintah secara otomatis g++-di jendela konsol Anda.
Bart van Ingen Schenau

Jawaban:

105

Melihat dari versi G ++ Anda, Anda perlu memperbaruinya dengan buruk. C ++ 11 hanya tersedia sejak G ++ 4.3. Versi terbaru adalah 4.7.

Di versi sebelum G ++ 4.7, Anda harus menggunakan -std=c++0x, untuk versi yang lebih baru yang dapat Anda gunakan -std=c++11.

antonijn
sumber
1
Apakah 4.8.0 bagus untuk digunakan, atau apakah ada rilis aktual di bulan Maret atau sesuatu?
chris
@chris Maaf, seharusnya 4,7, 4,8 masih dalam pengembangan.
antonijn
@Antonijn, Ah, kira saya akan menunggu satu atau dua bulan. Saya lebih suka rilis stabil, atau kata apa pun yang lebih baik untuk itu yang ingin Anda gunakan.
chris
@ Ya. Atau Anda hanya menunggu manajer pembaruan linux mint memberi tahu Anda :)
antonijn
2
@JoeCoderGuy Ya, itu yang saya gunakan.
antonijn
14

Mengutip dari situs gcc :

Fitur C ++ 11 tersedia sebagai bagian dari compiler GCC "jalur utama" di bagasi repositori Subversion GCC dan di GCC 4.3 dan yang lebih baru. Untuk mengaktifkan dukungan C ++ 0x, tambahkan parameter baris perintah -std = c ++ 0x ke baris perintah g ++ Anda. Atau, untuk mengaktifkan ekstensi GNU selain ekstensi C ++ 0x, tambahkan -std = gnu ++ 0x ke baris perintah g ++ Anda. GCC 4.7 dan yang lebih baru mendukung -std = c ++ 11 dan -std = gnu ++ 11 juga.

Jadi, mungkin Anda menggunakan versi g ++ yang tidak mendukung -std=c++11. Coba -std=c++0xsaja.

Ketersediaan fitur C ++ 11 hanya untuk versi> = 4.3.

Stefan
sumber
@Antonijn Benar, tapi bukan pilihan untuk semua orang.
Stefan
@Antonijn: Ada perangkat lunak yang tidak kompatibel dengan versi> 4.1. Misalnya ABACUS informatik.uni-koeln.de/abacus/index.html Sayangnya saya harus menggunakannya sekali.
Stefan
3

kamu harus mencoba ini

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

Saya juga mendapat kesalahan yang sama, mengkompilasi dengan -D flag memperbaikinya, Coba ini:

g ++ -Dstd = c ++ 11

pankaj kushwaha
sumber
Mengapa ini tidak disukai? Ada apa dengan jawabannya? Mengapa ini tidak berhasil?
Veda
@Veda bagi saya setidaknya (di gcc4.6.3), itu pasti tidak dikompilasi dengan c ++ 11. Saya menulis program 2 baris sederhana dengan std::vector<int> v = {1, 2, 3};untuk menguji dan itu melemparkan semua jenis kesalahan di atasnya (kesalahan berbeda daripada tanpa bendera, cukup menarik).
scohe001
6
@Veda sementara jawaban ini akan dikompilasi, kemungkinan besar tidak melakukan apa pun yang diinginkan. The -Dargumen baris perintah setara dengan memasukkan #definedalam kode sumber Anda. Jadi perintah ini seperti memiliki #define std c++11. Dapatkah Anda membayangkan bagaimana std::stringakan didefinisikan ulang c++11::string? Tidak terlalu berguna sama sekali.
jwm