리눅스 환경에서 C 또는 C++ 프로그램을 개발하다 보면 gcc와 g++이라는 두 가지 컴파일러를 자주 접하게 됩니다. 두 도구는 이름이 비슷해 혼동하기 쉽지만, 실제로는 동작 방식과 용도에 중요한 차이가 있습니다. 이 글에서는 각 컴파일러의 특징과 사용 예제, 그리고 핵심 차이점까지 한눈에 정리해 드립니다.
g++이란?
GNU C++ Compiler(g++)는 리눅스에서 C++ 프로그램을 컴파일하기 위해 사용되는 컴파일러입니다. 가장 큰 특징은 .c 확장자와 .cpp 확장자를 가진 파일을 모두 C++ 코드로 취급하여 컴파일한다는 점입니다.
C++ 프로그램을 컴파일할 때 사용하는 기본 명령어는 다음과 같습니다.
g++ program.cpp -o filename
여기서 filename은 생성될 실행 파일의 이름을 의미하며, 소스 파일은 .c 또는 .cpp 확장자를 가질 수 있습니다.
사용 예제
#include <iostream>
using namespace std;
int main() {
int a = 20;
cout << "The value of a : " << a;
return 0;
}
실행 결과
$g++ -o main *.cpp $main The value of a : 20
gcc란?
GNU C Compiler(gcc)는 리눅스에서 C 프로그램을 컴파일하기 위해 사용되는 대표적인 컴파일러입니다. 기본적으로 .c 확장자를 가진 파일을 C 언어 코드로 취급하여 컴파일합니다.
C 프로그램을 컴파일할 때 사용하는 기본 명령어는 다음과 같습니다.
gcc program.c -o filename
여기서 filename은 .c 확장자를 가진 소스 파일로부터 생성될 실행 파일의 이름입니다.
사용 예제
#include <stdio.h>
int main() {
int a = 20;
printf("The value of a : %d", a);
return 0;
}
실행 결과
$gcc -o main *.c $main The value of a : 20
g++과 gcc의 핵심 차이점
두 컴파일러의 차이를 표로 정리하면 다음과 같습니다.
| 구분 | gcc | g++ |
|---|---|---|
| 기본 처리 방식 | .c 파일은 C로, .cpp 파일은 C++로 컴파일 | .c와 .cpp 파일을 모두 C++로 컴파일 |
| 주요 용도 | C 프로그램 컴파일 | C++ 프로그램 컴파일 |
| 라이브러리 링크 | C++ 표준 라이브러리를 자동으로 링크하지 않음 | C++ 표준 라이브러리(libstdc++)를 자동으로 링크 |
| 전처리기 매크로 | __cplusplus 매크로 미정의 | __cplusplus 매크로 정의됨 |
특히 주의할 점은, gcc로도 C++ 소스(.cpp) 파일을 컴파일할 수는 있지만 C++ 표준 라이브러리가 자동으로 링크되지 않아 -lstdc++ 옵션을 직접 지정해야 할 수 있다는 것입니다. 반면 g++은 이 과정을 자동으로 처리해 주기 때문에 C++ 프로젝트에서는 g++을 사용하는 것이 일반적입니다.
정리
C 언어 코드를 컴파일할 때는 gcc, C++ 언어 코드를 컴파일할 때는 g++을 사용하는 것이 안전하고 일반적인 선택입니다. 두 컴파일러의 동작 차이를 정확히 이해하고 있으면 불필요한 빌드 오류나 링크 오류를 사전에 예방할 수 있습니다.