문제

g++와 gcc의 차이점은 무엇입니까?일반 C++ 개발에는 어떤 것을 사용해야 합니까?

도움이 되었습니까?

해결책

gcc 그리고 g++ GNU 컴파일러의 컴파일러 드라이버입니다 수집 (옛날에 gnu 만 C 컴파일러).

비록 그들이 어떤 백엔드를 자동으로 결정하더라도cc1 cc1plus ...) 파일 유형에 따라 호출하려면 -x language, 그들은 약간의 차이점이 있습니다.

기본값의 가장 중요한 차이점은 자동으로 연결되는 라이브러리입니다.

GCC의 온라인 문서에 따르면 링크 옵션 그리고 G ++가 호출되는 방법, g++ 동일합니다 gcc -xc++ -lstdc++ -shared-libgcc (첫 번째는 컴파일러 옵션이고, 두 번째는 링커 옵션입니다). 둘 다 실행하여 확인할 수 있습니다 -v 옵션 (백엔드 도구 체인 명령이 실행 중임)을 표시합니다.

다른 팁

GCC : GNU 컴파일러 컬렉션

  • GNU 컴파일러가 지원하는 모든 다른 언어를 추천합니다.

GCC : GNU C 컴파일러
G ++ : GNU C ++ 컴파일러

주요 차이점 :

  1. GCC는 다음과 같이 컴파일합니다 : *.c/ *. CPP 파일은 각각 C 및 C ++로 컴파일됩니다.
  2. G ++는 다음과 같이 컴파일합니다 : *.c/ *. CPP 파일이지만 모두 C ++ 파일로 취급됩니다.
  3. 또한 g ++를 사용하여 객체 파일을 연결하면 STD C ++ 라이브러리에서 자동으로 연결됩니다 (GCC는이 작업을 수행하지 않습니다).
  4. GCC 컴파일 C 파일에는 사전 정의 된 매크로가 적습니다.
  5. GCC 컴파일 *.CPP 및 G ++ 컴파일 *.C/ *. CPP 파일에는 몇 가지 추가 매크로가 있습니다.

*.cpp 파일을 컴파일 할 때 추가 매크로 :

#define __GXX_WEAK__ 1
#define __cplusplus 1
#define __DEPRECATED 1
#define __GNUG__ 4
#define __EXCEPTIONS 1
#define __private_extern__ extern

C ++의 경우 g ++를 사용해야합니다.

동일한 컴파일러입니다 (예 : GNU 컴파일러 컬렉션). GCC 또는 G ++ 기본 옵션이 다른 다른 프론트 엔드를 선택하십시오.

간단히 말해서 : G ++를 사용하는 경우 프론트 엔드는 링커에 C ++ 표준 라이브러리와 링크 할 수 있다고 알려줍니다. GCC 프론트 엔드는 그렇게하지 않습니다 (또한 올바른 명령 줄 옵션을 통과하면 링크 할 수도 있음).

차이점은 무엇입니까? g++ 그리고 gcc?

gcc 단일 언어 "GNU C 컴파일러"에서 다국어 "GNU 컴파일러 컬렉션"으로 발전했습니다. "GNU C 컴파일러"라는 용어는 여전히 C 프로그래밍의 맥락에서 때때로 사용됩니다.

그만큼 g++ ~이다 GNU 컴파일러 컬렉션의 C ++ 컴파일러. 처럼 gnat ADA 컴파일러입니다 gcc. GNU 컴파일러 컬렉션 (GCC) 사용 참조

예를 들어, 우분투 16.04 및 18.04 man g++ 명령을 반환합니다 GCC(1) 수동 페이지.

우분투 16.04 및 18.04 man gcc 말 ...

g++ 대부분 동일한 옵션을 수락합니다 gcc

그리고 그 기본값 ...

... 사용 gcc C ++ 라이브러리를 추가하지 않습니다. g++ GCC를 호출하고 C ++ 라이브러리에 대한 링크를 자동으로 지정하는 프로그램입니다. -x를 사용하지 않는 한 .c, .h 및 .i 파일을 C 소스 파일 대신 C ++ 소스 파일로 취급합니다. 이 프로그램은 C ++ 컴파일에 사용하기 위해 .h 확장자가있는 C 헤더 파일을 사전 컴파일 할 때 유용합니다.

검색 gcc 옵션 차이에 대한 관습 세부 사항에 대한 사람 페이지 gcc 그리고 g++.

일반적인 C ++ 개발에 어느 것이 사용되어야합니까?

기술적으로도 gcc 또는 g++ 해당 옵션 설정을 사용하여 일반적인 C ++ 개발에 사용할 수 있습니다. 그러나, 그 g++ 기본 동작은 자연스럽게 C ++ 개발에 정렬됩니다.

Ubuntu 18.04 Man Page가 다음 단락을 추가했습니다.

GCC를 실행하는 일반적인 방법은 gcc, 또는 machine-gcc 크로스 컴파일시 또는 machine-gcc-version GCC의 특정 버전을 실행합니다. C ++ 프로그램을 컴파일하면 GCC를 g++ 대신에.

주목할만한 차이점은 당신이 통과하는 경우 .c GCC에는 C로 컴파일되는 반면 G ++는 항상 C ++로 처리합니다.

GCC 및 G ++ 명령은 매우 유사한 작업을 수행하지만 G ++는 C ++ 프로그램을 컴파일하기 위해 호출하는 명령으로 설계되었습니다. 그것은 올바른 일을 자동으로 수행하기위한 것입니다.

무대 뒤에서, 그들은 정말 같은 프로그램과 같습니다. 내가 이해 한 바와 같이, 둘 다 파일 이름 확장을 기반으로 프로그램을 C 또는 C ++로 컴파일할지 여부를 결정합니다. 둘 다 C ++ 표준 라이브러리와 연결할 수 있지만 G ++만이 기본적으로이를 수행합니다. 따라서 표준 라이브러리와 연결할 필요가없는 C ++로 작성된 프로그램이있는 경우 GCC는 올바른 일을합니다. 그러나 G ++도 마찬가지입니다. 따라서 일반적인 C ++ 개발에 G ++를 사용하지 않을 이유는 없습니다.

나는 그 문제에 관심을 갖게 되었고 몇 가지 실험을 수행했습니다.

  1. 그 설명을 찾았어요 여기, 하지만 매우 짧습니다.

  2. 그런 다음 Windows 컴퓨터에서 gcc.exe 및 g++.exe를 실험해 보았습니다.

    $ g++ --version | head -n1 
    g++.exe (gcc-4.6.3 release with patches [build 20121012 by perlmingw.sf.net]) 4.6.3
    
    $ gcc --version | head -n1
    gcc.exe (gcc-4.6.3 release with patches [build 20121012 by perlmingw.sf.net]) 4.6.3
    
  3. c89, c99 및 c++1998 간단한 테스트 파일을 컴파일하려고 시도했는데 언어에 맞는 올바른 확장명을 사용하면 잘 작동합니다.

    gcc -std=c99 test_c99.c
    gcc -std=c89 test_c89.c 
    g++ -std=c++98 test_cpp.cpp
    gcc -std=c++98 test_cpp.cpp
    
  4. 하지만 그런 방식으로 "gnu 컴파일러 수집" 도구를 실행하려고 하면 다음과 같습니다.

    $ gcc -std=c++98 test_cpp.c
    cc1.exe: warning: command line option '-std=c++98' is valid for C++/ObjC++ but not for C [enabled by default]
    
  5. 하지만 이것은 여전히 ​​오류 없이 작동합니다.

    $ gcc -x c++ -std=c++98 test_cpp.c
    
  6. 그리고 이것도

    $ g++ -std=c++0x test_cpp_11.cpp 
    

추신.테스트 파일

$ cat test_c89.c test_c99.c test_cpp.cpp

// C89 compatible file
int main()
{
    int x[] = {0, 2};
    return sizeof(x);
}

// C99 compatible file
int main()
{
    int x[] = {[1]=2};
    return sizeof(x);
}

// C++1998,2003 compatible file
class X{};
int main()
{
    X x;
    return sizeof(x);
}

// C++11
#include <vector>
enum class Color : int{red,green,blue}; // scoped enum
int main()
{
    std::vector<int> a {1,2,3}; // bracket initialization
    return 0;
}

결과:

  1. 프로세스 트리를 보면 gcc와 g++가 내 환경에서 다음과 같은 다른 도구에 대한 백엔드인 것 같습니다. cc1plus.exe, cc1.exe, Collect2.exe, as.exe, ld.exe

  2. GCC는 올바른 확장자가 있거나 올바른 -STD -X 플래그를 설정하는 경우 Metatool로 잘 작동합니다.보다 이것

"GCC"는 GNU 컴파일러 컬렉션을 가리키는 일반적인 약어입니다.이는 컴파일러의 가장 일반적인 이름이자 C 프로그램 컴파일에 중점을 둘 때 사용되는 이름입니다(이전의 약어는 "GNU C Compiler"를 의미함).

C++ 컴파일을 언급할 때 컴파일러를 "G++"라고 부르는 것이 일반적입니다.컴파일러는 하나뿐이므로 언어 ​​문맥에 관계없이 "GCC"라고 부르는 것이 정확합니다.그러나 "G++"라는 용어는 C++ 프로그램 컴파일에 중점을 둘 때 더 유용합니다.

더 많은 내용을 읽을 수 있습니다. 여기.

Linux 시스템에서 GCC 및 G ++를 테스트하고있었습니다. MakeFile을 사용하면 "GNU Make"가 사용하는 분충기를 정의 할 수 있습니다. "C Plus"의 소위 "동적 메모리"위치 기능으로 테스트했습니다.

int main(){

int * myptr = new int;
* myptr = 1;
printf("myptr[0] is %i\n",*myptr);
return 0;
}

GCC가 오류를보고하는 동안 G ++만이 내 컴퓨터에서 성공적으로 컴파일 할 수 있습니다.

undefined reference to `operator new(unsigned long)'

따라서 내 자신의 결론은 GCC가 "C Plus Plus"를 완전히 지원하지 않는다는 것입니다. C ++ 소스 파일을 위해 g ++를 선택하는 것이 더 나은 옵션 인 것 같습니다.

GCC 및 G ++는 둘 다 GNU 컴파일러입니다. 그들은 c와 c ++를 컴파일합니다. 차이점은 *.c 파일 GCC가이를 AC 프로그램으로 취급하고 G ++는 AC ++ 프로그램으로 간주됩니다. *.CPP 파일은 C ++ 프로그램으로 간주됩니다. C ++는 C의 슈퍼 세트이며 구문이 더 엄격하므로 접미사에주의하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top