cc1plus : 오류 : g ++에서 인식 할 수없는 명령 줄 옵션“-std = c ++ 11”


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의
스테판

2
@stefan 틀 렸습니다. 둘 다 가능합니다. 어떤 gnu 버전을 사용하고 있습니까? C ++ 11은> = 4.3에서만 지원됩니다.
antonijn

2
을 실행 g++ --version합니다. 그런 다음 여기에 버전 번호를 게시하십시오.
Konfle Dolex 2013

3
끔찍하게 오래되었습니다. 해당 버전은 C ++ 11을 지원하지 않습니다. C ++ 11 지원을 위해 4.7과 같은 최신 버전을 설치합니다.
Konfle Dolex 2013

4
시스템 관리자 C ++ 11 가능 컴파일러를 설치했지만 기본 컴파일러로 만들지 않았을 수 있습니다. g++-콘솔 창에서 명령 자동 완성을 시도하여 설치된 특정 버전의 GCC를 확인할 수 있습니다 .
Bart van Ingen Schenau 2013

답변:


105

G ++ 버전을 보면 심하게 업데이트해야합니다. C ++ 11은 G ++ 4.3 이후에만 사용 가능합니다. 최신 버전은 4.7입니다.

G ++ 4.7 이전 버전에서는을 사용해야 -std=c++0x하며 최신 버전의 경우 -std=c++11.


1
4.8.0이 괜찮을까요, 아니면 3 월에 실제로 출시 될까요?
chris

@chris 죄송합니다. 4.7이어야하고 4.8은 아직 개발 중입니다.
antonijn 2013

@Antonijn, 아, 한두 달을 기다릴 것 같아요. 나는 안정된 릴리스 나 당신이 사용하고 싶은 더 나은 단어를 선호합니다.
chris

@chris 그래. 아니면 그냥 리눅스 민트 업데이트 관리자가 알려줄 때까지 기다리세요 :)
antonijn

2
@JoeCoderGuy 그래, 그게 내가 사용하는 것입니다.
antonijn

14

gcc 웹 사이트 에서 인용 :

C ++ 11 기능은 GCC의 Subversion 저장소 트렁크 및 GCC 4.3 이상에서 "주요"GCC 컴파일러의 일부로 사용할 수 있습니다. C ++ 0x 지원을 활성화하려면 명령 줄 매개 변수 -std = c ++ 0x를 g ++ 명령 줄에 추가합니다. 또는 C ++ 0x 확장 외에 GNU 확장을 활성화하려면 g ++ 명령 줄에 -std = gnu ++ 0x를 추가합니다. GCC 4.7 이상은 -std = c ++ 11 및 -std = gnu ++ 11도 지원합니다.

따라서 아마도 .NET을 지원하지 않는 g ++ 버전을 사용하고있을 것입니다 -std=c++11. -std=c++0x대신 시도하십시오 .

C ++ 11 기능의 가용성은 버전 4.3 이상에서만 가능합니다.


@Antonijn 정확하지만 모든 사람을위한 옵션은 아닙니다.
스테판

@Antonijn : 버전> 4.1과 호환되지 않는 소프트웨어가 있습니다. 예 : ABACUS informatik.uni-koeln.de/abacus/index.html 슬프게도 한 번만 사용해야했습니다.
스테판 2013

3

당신은 이것을 시도해야합니다

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

-4

나는 또한 같은 오류가 발생하여 -D 플래그로 컴파일하여 수정했습니다.

g ++ -Dstd = c ++ 11


왜 이것이 반대 투표입니까? 답변에 문제가 있습니까? 왜 작동하지 않습니까?
Veda

적어도 나를 위해 @Veda (gcc4.6.3에서), 확실히 C ++ 11로 컴파일하지 않았습니다. 나는 std::vector<int> v = {1, 2, 3};테스트 를 위해 간단한 2 줄 프로그램을 작성 했고 그 위에 모든 종류의 오류를 던졌습니다 (플래그가없는 것과는 다른 오류, 흥미롭게도 충분히).
scohe001

6
이 답변이 컴파일되는 동안 @Veda는 바람직한 일을하지 않을 가능성이 큽니다. -D명령 행 인수는 삽입에 해당 #define소스 코드에서. 따라서이 명령은 #define std c++11. 그러면 어떻게 std::string재정의 될지 상상할 수 있습니까 c++11::string? 전혀 유용하지 않습니다.
jwm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.