2012-04-28 2 views
258

C++ 컴파일러를 C++ 11로 업데이트하려고합니다. 약간 검색 한 결과 플래그 -std=c++0x 또는 -std=gnu++0x을 사용해야한다는 결론에 도달했지만 플래그에 대해 많은 것을 알지 못합니다. 누구든지 나를 도울 수 있습니까? (우분투 12.04를 사용하고 있습니다.) 난 C++ 11 (즉, 배열)에 포함되어있는 라이브러리를 사용하려고하면 다음 g ++로 C++ 11 컴파일

내가 컴파일러에서 얻을 오류입니다 :

#include <array> 
#include <iostream> 

int main() 
{ 
    std::array<int, 3> arr = {2, 3, 5}; 
    ... 
} 

This file requires compiler and library support for the upcoming ISO C++ standard, C++0x. This support is currently experimental, and must be enabled with the -std=c++0x or -std=gnu++0x compiler options.

+0

하여 프로그램을 컴파일합니다. 메이크 파일? 식? 다른 것? – dutt

+3

최신 버전에서는 대신 -std = C++ 11을 사용해야합니다. 하지만 둘 다 허용 될 수 있습니다. –

+6

이것은 많은 문맥을 놓친다. 시도한 모든 명령 (컴파일하려고했던 샘플 코드조차도)과 실제로 실패한 것을 표시하십시오. – KillianDS

답변

386

플래그 (또는 컴파일러 옵션)는 컴파일러 실행 파일에 전달되는 일반적인 명령 줄 인수 일뿐입니다.

명령 줄 (터미널)에서 ++ g를 호출하는 가정 :

$ g++ -std=c++11 your_file.cpp -o your_program

또는

$ g++ -std=c++0x your_file.cpp -o your_program

위에서 작동하지 않을 경우

.

+6

'-gall '을'g ++'의 바로 뒤에 넣는 것을 잊지 마라. –

+5

@BasileStarynkevitch : 나는 프로젝트를 시작할 때가 아니라'-Werror'도 추가 할 것이다. –

+0

그것은 일했다! 고마워요! –

11

당신의 우분투에는 확실히 최신 버전의 g ++가 있습니다. 사용할 플래그는 -std=c++0x입니다.

+0

당신은 어떻게 그 우분투를 사용하고 있다고 말할 수 있습니까? 단지 궁금해서. – Shravan40

+9

@ Shravan40 OP는 질문에 '나는 우분투 12.04를 사용하고 있습니다.'라고 명시 적으로 말합니다. –

8

GNU 컴파일러 확장을 유지하려면 -std = C++ 0x 대신 -std = gnu ++ 0x를 사용하십시오. 컴파일러는 같은 gnu89 또는 GNU ++ 98이 기준의 C89 또는 C++ 98 및 GNU 방언, 같은 몇 가지 기본 표준을 수용 할 수

다음은 man 페이지에서 인용이다. 기본 표준을 지정하는 에 의해 컴파일러는 해당 표준을 따르는 모든 프로그램 을 수락하고 이 아닌 GNU 확장을 사용하는 프로그램은 모순됩니다. 예를 들어 -std = c89는 "asm"및 "typeof" 키워드와 같이 ISO C90과 호환되지 않는 GCC 의 특정 기능을 해제하지만 ISO C90에 의미가없는 다른 GNU 확장명은 비활성화하지 않습니다. "? :"표현식의 중기를 생략하는 것과 같이. 다른 표준에서 GNU dialect를 지정하면 기본 표준의 의미가 변경되고 일부 거부 된 경우에도 컴파일러 지원 모든 기능이 활성화됩니다. 특정 표준은 -pedantic에서 을 식별하는 데 사용됩니다.이 기능은 해당 표준 버전에서 GNU 확장입니다. 예를 들어 -std = gnu89 -pedantic은 C++ 스타일 // 주석에 대해 경고하지만 -std = gnu99 -pedantic은 경고하지 않습니다.

+0

그러면 바이너리'? :'연산자를 제외하고 무엇이 당신을 얻게 될까요? 구조 표현식을 염두에 두는 유일한 다른 확장은 C++ 11 목록 초기화로 대체됩니다. 어쨌든이 인용문은 주로 C++가 아니라 C와 관련이 있습니다. – Potatoswatter

39

당신은 확인할 수 있습니다 명령에 의해 g++ :

which g++ 
g++ --version 

이 현재이 가리키는하는 컴파일러를 알려줍니다.

g++으로 전환하십시오. 4.7 (당신이 당신의 컴퓨터에 설치되어 있다고 가정), 실행

sudo update-alternatives --config gcc 

There are 2 choices for the alternative gcc (providing /usr/bin/gcc). 

    Selection Path    Priority Status 
------------------------------------------------------------ 
    0   /usr/bin/gcc-4.6 60  auto mode 
    1   /usr/bin/gcc-4.6 60  manual mode 
* 2   /usr/bin/gcc-4.7 40  manual mode 

을 그리고 선택과 같은 2를 선택하십시오 (내 컴퓨터가 이미 g++ 4.7을 가리키는 때문에 *)

그런 다음 컴파일러를 전환 한 후에 다시 전환이 올바르게 발생했는지 확인하려면 g++ --version을 실행하십시오.

지금 그것은 당신이 구축 사용에 따라 달라집니다

g++ -std=c++11 your_file.cpp -o main 
+0

g ++ 4.4와 같은 버전은 일부 기능을 수행하기에는 너무 오래된 것일 수 있으므로 업그레이드해야합니다. 업그레이드는 시스템에 따라 다르기 때문에 직접 g ++를 컴파일하는 방법과 참조를 위해 시스템의 컴파일러를 교체하는 방법은 피할 수 있습니다 –

관련 문제