cc1plus: hata: g ++ ile tanınmayan komut satırı seçeneği "-std = c ++ 11"


91

Ben kullanarak derlemek çalışıyorum g++ve ya -std=c++11ya c++0xbayraklar.

Ancak bu hatayı alıyorum

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
öyle -std=c++0x++ g
Stefan

2
@stefan Yanlış, her ikisi de mümkündür. Hangi gnu sürümünü kullanıyorsunuz? C ++ 11 yalnızca> = 4.3'te desteklenir.
antonijn

2
Çalıştır g++ --version. Ardından sürüm numarasını buraya gönderin.
Konfle Dolex

3
Bu çok eski. Bu sürüm C ++ 11'i desteklemiyor. C ++ 11 desteği için 4.7 gibi daha sonraki bir sürümü yükleyin.
Konfle Dolex

4
Sistem yöneticilerinin C ++ 11 uyumlu bir derleyici kurmuş, ancak bunu varsayılan derleyici yapmamış olması mümkündür . g++-Konsol pencerenizdeki komutu otomatik olarak tamamlamayı deneyerek GCC'nin hangi belirli sürümlerinin kurulu olduğunu kontrol edebilirsiniz .
Bart van Ingen Schenau

Yanıtlar:


105

G ++ sürümünüzden bakıldığında, onu kötü bir şekilde güncellemeniz gerekiyor. C ++ 11 yalnızca G ++ 4.3'ten beri mevcuttur. En son sürüm 4.7'dir.

G ++ 4.7 öncesi sürümlerde, kullanabileceğiniz -std=c++0xdaha yeni sürümler için kullanmanız gerekecek -std=c++11.


1
4.8.0 gitmek güzel mi, yoksa Mart ayında falan gerçek bir sürüm var mı?
chris

@chris Üzgünüm, 4.7 olmalı, 4.8 hala geliştirme aşamasında.
antonijn

@Antonijn, Ah, sanırım bir veya iki ay bekleyeceğim. Kararlı sürümleri ya da kullanmak istediğiniz daha iyi bir kelimeyi tercih ederim.
chris

@chris Evet. Veya linux nane güncelleme yöneticisinin sizi bilgilendirmesini bekleyin :)
antonijn

2
@JoeCoderGuy Evet, kullandığım bu.
antonijn

14

Gcc web sitesinden alıntı yapmak :

C ++ 11 özellikleri, GCC'nin Subversion deposunun ana hattında ve GCC 4.3 ve sonrasında "mainline" GCC derleyicisinin bir parçası olarak mevcuttur. C ++ 0x desteğini etkinleştirmek için, -std = c ++ 0x komut satırı parametresini g ++ komut satırınıza ekleyin. Veya, C ++ 0x uzantılarına ek olarak GNU uzantılarını etkinleştirmek için, g ++ komut satırınıza -std = gnu ++ 0x ekleyin. GCC 4.7 ve üzeri, -std = c ++ 11 ve -std = gnu ++ 11'i de destekler.

Yani muhtemelen desteklemeyen bir g ++ sürümünü kullanıyorsunuz -std=c++11. Onun -std=c++0xyerine deneyin .

C ++ 11 özelliklerinin kullanılabilirliği yalnızca> = 4.3 sürümleri içindir.


@Antonijn Doğru, ancak herkes için bir seçenek değil.
stefan

@Antonijn:> 4.1 sürümleriyle uyumsuz olan bir yazılım var. Örneğin ABACUS informatik.uni-koeln.de/abacus/index.html Ne yazık ki bir kez kullanmak zorunda kaldım.
stefan

3

bunu denemelisin

g++-4.4 -std=c++0x or g++-4.7 -std=c++0x

-4

Ben de aynı hatayı aldım, -D bayrağıyla derleme düzeltildi, Şunu deneyin:

g ++ -Dstd = c ++ 11


Bu neden reddedildi? Cevabın nesi var? Bu neden çalışmıyor?
Veda

@Veda en azından benim için (gcc4.6.3'te) kesinlikle c ++ 11 ile derlenmiyordu. std::vector<int> v = {1, 2, 3};Test etmek için 2 satırlık basit bir program yazdım ve üzerine her türlü hatayı fırlatıyordu (bayraksız olandan farklı hatalar, yeterince ilginç).
scohe001

6
@Veda bu cevap derlenirken, çok büyük olasılıkla istenen bir şey yapmıyor. -DKomut satırı argümanı bir ekleme eşdeğerdir #definekaynak kodunda. Yani bu komut sahip olmak gibidir #define std c++11. O halde nasıl std::stringyeniden tanımlanacağını hayal edebiliyor c++11::stringmusunuz? Hiç de kullanışlı değil.
jwm
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.