-
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++!