ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • gcc와 g++
    Tech/Development 2014. 1. 4. 22:46

    gcc를 써야할지 g++을 써야할지 헷갈릴 때가 있다. gcc나 g++나 모두 front-end일 뿐 실제로는 컴파일러와 링커가 어떻게 동작할지 연결해주는 역할만 한다.

    gcc 를 쓸 경우

    • 확장자(.c or .cc/.cpp)에 따라 C 또는 C++로 컴파일 할지 결정한다.
    • C 라이브러리와 링크한다. 즉, 옵션을 통해 별도로 링크하지 않는 이상 C++ 라이브러리가 링크되는 일은 없다.

    g++를 쓸 경우

    • 확장자(.c or .cc/.cpp)에 상관없이 무조건 C++로 컴파일 한다.
    • 컴파일된 결과는 당연히 C++ 라이브러리와 링크된다.

    아래의 예제를 보자.

    #include <stdio.h>
    
    int main(void)
    {
        printf("I was compiled as %s!\n", sizeof('a') == 1 ? "C++" : "C");
    }
    

    위 코드를 gcc와 g++로 각각 컴파일할 경우 그 결과가 다르다.

    $ gcc -o test test.c
    $ ./test
    I was compiled as C!
    $ g++ -o test test.cc
    $ ./test
    I was compiled as C++!
    

    하지만 cpp/cc 파일을 gcc로 컴파일하면 링크 에러가 난다. 위에서 이야기했듯이, gcc front-end 는 확장자가 cc이므로 C++로 컴파일했지만, 링크는 여전히 C 라이브러리만 링크하기 때문이다. 따라서 undefined reference에러가 뜰 것이다.

    g++로 c 파일을 컴파일하면, C++로 컴파일하고, 링크도 C++로 완료한다. 아래와 같이 나타날 것이다.

    $ g++ -o test test.c
    $ ./test
    I was compiled as C++!
    

    댓글

Copyright 2022 JY