cc1plus: error: tùy chọn dòng lệnh không được công nhận “-std = c ++ 11” với g ++


90

Tôi đang cố gắng để biên dịch sử dụng g++và một trong hai -std=c++11hoặc c++0xcờ.

Tuy nhiên, tôi gặp lỗi này

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

g ++ - phiên bản

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++0xvới g ++
stefan

2
@stefan Không chính xác, cả hai đều có thể. Bạn đang sử dụng phiên bản gnu nào? C ++ 11 chỉ được hỗ trợ trong> = 4.3.
antonijn

2
Chạy đi g++ --version. Sau đó đăng số phiên bản ở đây.
Konfle Dolex

3
Nó cũ kinh khủng. Phiên bản đó không hỗ trợ C ++ 11. Cài đặt phiên bản mới hơn như 4.7 để hỗ trợ C ++ 11.
Konfle Dolex

4
Có thể các sysadmins đã cài đặt một trình biên dịch có khả năng C ++ 11, nhưng không đặt nó làm trình biên dịch mặc định. Bạn có thể kiểm tra phiên bản GCC cụ thể nào được cài đặt bằng cách thử tự động hoàn thành lệnh g++-trong cửa sổ bảng điều khiển của bạn.
Bart van Ingen Schenau

Câu trả lời:


105

Nhìn thấy từ phiên bản G ++ của bạn, bạn cần phải cập nhật nó. C ++ 11 chỉ có sẵn kể từ G ++ 4.3. Phiên bản gần đây nhất là 4.7.

Trong các phiên bản trước G ++ 4.7, bạn sẽ phải sử dụng -std=c++0x, đối với các phiên bản mới hơn, bạn có thể sử dụng -std=c++11.


1
4.8.0 có tốt để đi không, hay có bản phát hành thực tế vào tháng 3 hay gì đó không?
chris

@chris Tôi xin lỗi, nó phải là 4.7, 4.8 vẫn đang được phát triển.
antonijn

@Antonijn, À, đoán là tôi sẽ đợi một hoặc hai tháng. Tôi thích các bản phát hành ổn định hoặc bất kỳ từ nào tốt hơn cho nó mà bạn muốn sử dụng.
chris

@chris Vâng. Hoặc bạn chỉ cần đợi trình quản lý cập nhật bạc hà linux thông báo cho bạn :)
antonijn

2
@JoeCoderGuy Yep, đó là cái tôi đang sử dụng.
antonijn

14

Trích dẫn từ trang web gcc :

Các tính năng C ++ 11 có sẵn như một phần của trình biên dịch GCC "dòng chính" trong thân của kho lưu trữ Subversion của GCC và trong GCC 4.3 trở lên. Để bật hỗ trợ C ++ 0x, hãy thêm tham số dòng lệnh -std = c ++ 0x vào dòng lệnh g ++ của bạn. Hoặc, để bật tiện ích mở rộng GNU ngoài tiện ích mở rộng C ++ 0x, hãy thêm -std = gnu ++ 0x vào dòng lệnh g ++ của bạn. GCC 4.7 trở lên cũng hỗ trợ -std = c ++ 11 và -std = gnu ++ 11.

Vì vậy, có thể bạn sử dụng phiên bản g ++ không hỗ trợ -std=c++11. Hãy thử -std=c++0xthay thế.

Tính năng sẵn có của C ++ 11 chỉ dành cho các phiên bản> = 4.3.


@Antonijn Đúng, nhưng không phải là một lựa chọn cho tất cả mọi người.
stefan

@Antonijn: Có phần mềm không tương thích với các phiên bản> 4.1. Ví dụ: ABACUS Informatik.uni-koeln.de/abacus/index.html Thật đáng buồn là tôi đã phải sử dụng nó một lần.
stefan

3

bạn nên thử cái này

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

-4

Tôi cũng gặp lỗi tương tự, biên dịch với cờ -D đã sửa nó, Hãy thử cách này:

g ++ -Dstd = c ++ 11


Tại sao điều này bị phản đối? Có gì sai với câu trả lời? Tại sao điều này không hoạt động?
Veda

@Veda đối với tôi ít nhất (trên gcc4.6.3), nó chắc chắn không được biên dịch bằng c ++ 11. Tôi đã viết một chương trình 2 dòng đơn giản với std::vector<int> v = {1, 2, 3};để kiểm tra và nó đã ném ra tất cả các loại lỗi trên nó (các lỗi khác với lỗi không có cờ, đủ thú vị).
scohe001

6
@Veda trong khi câu trả lời này sẽ được biên dịch, nó rất có thể không làm được điều gì mong muốn. Đối -Dsố dòng lệnh tương đương với việc chèn một #definemã nguồn của bạn. Vì vậy, lệnh này giống như có #define std c++11. Sau đó, bạn có thể tưởng tượng std::stringsẽ được định nghĩa lại như c++11::stringthế nào không? Không hữu ích cho lắm.
jwm 13/03/18
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.