리눅스 환경에서 C 또는 C++ 프로그램을 개발하기 위해서는 컴파일러 설치가 필수적이다.
우분투에서 C 개발 환경을 구축하는 방법과 주요 도구들의 차이점을 알아보자.
1. GCC vs G++
GCC와 G++ 둘 다 GNU 컴파일러 모음(GCC)에 포함되어 있지만, 처리 방식에 차이가 있다.
| 구분 | GCC (gcc) | G++ (g++) |
| 주요 대상 | C 언어 컴파일러 | C++ 언어 컴파일러 |
| 확장자 인식 | .c는 C로, .cpp는 C++로 인식 | 모든 파일을 C++로 간주 |
| 라이브러리 링크 | C++ 표준 라이브러리를 자동 링크하지 않음 | **C++ 표준 라이브러리(STL)**를 자동 링크 |
C 코드를 짤 때는 gcc, C++ 코드를 짤 때는 g++를 사용하는 것이 표준이다.
C++ 파일을 gcc로 컴파일하면 라이브러리 링크 오류가 발생할 수 있으므로 주의해야 한다.
2. 리눅스에서 GCC/G++ 설치하기
우분투에서는 개별 컴파일러를 하나씩 설치하기보다, 개발에 필요한 필수 도구를 모아놓은 build-essential 패키지를 설치하는 것이 훨씬 간편하다.
설치 단계
- 패키지 목록 업데이트: 최신 정보를 가져온다.
sudo apt update - 필수 도구 모음 설치:
sudo apt install build-essential
3. build-essential 패키지 구성 요소
build-essential을 설치하면 단순히 컴파일러만 깔리는 것이 아니라, 소프트웨어를 빌드하는 데 꼭 필요한 다음 도구들이 함께 설치된다.
| 도구/패키지명 | 역할 설명 |
| gcc | GNU C 컴파일러. C 코드를 실행 파일로 변환한다. |
| g++ | GNU C++ 컴파일러. C++ 코드를 실행 파일로 변환한다. |
| make | Makefile을 읽어 빌드 과정을 자동화하는 도구이다. |
| libc6-dev | C 표준 라이브러리와 헤더 파일(stdio.h 등)을 포함한다. |
| dpkg-dev | 데비안 패키지를 생성하고 관리하는 데 필요한 도구이다. |
참고: 디버깅 도구인 gdb는 build-essential에 포함되지 않는 경우가 많다. 만약 gdb --version 입력 시 정보가 나오지 않는다면 sudo apt install gdb로 별도 설치해야 한다. (일부 환경에서는 의존성 패키지로 인해 이미 설치되어 있을 수 있다.)
4. 설치 확인 및 버전 체크
설치가 끝났다면 각 도구가 정상적으로 작동하는지 버전을 확인하여 점검한다.
터미널에 아래 명령어를 입력했을 때 버전 정보가 출력되면 성공이다.
$ gcc --version
$ g++ --version
$ make --version
만약 특정 실행 파일의 위치가 궁금하다면 which 명령어를 사용해 확인할 수 있다.
- 예: which gcc -> 결과: /usr/bin/gcc
5. 간단한 컴파일 테스트
설치가 잘 되었는지 확인하기 위해 간단한 C 코드를 작성하고 컴파일해 본다.
1. 코드 작성 (hello.c)
#include <stdio.h>
int main() {
printf("Hello World!\n");
return 0;
}
2. 컴파일
gcc hello.c -o hello 또는 gcc -o hello hello.c
** -o 바로 다음에는 내가 만들고 싶은 실행 파일 이름이 오도록 함.
3. 실행
./hello
정상적으로 "Hello World!"가 출력된다면 이제 리눅스에서 C/C++ 개발을 시작할 준비가 끝난 것이다.
'Journey to Security > 리눅스' 카테고리의 다른 글
| /lib : 정적 라이브러리(.a) vs 동적 공유 라이브러리(.so) (0) | 2026.02.15 |
|---|---|
| [Linux] APT 저장소 방식으로 VS Code 설치하기 (작동 원리) (0) | 2026.02.10 |
| [VMware] 가상머신 템플릿 만들기: OVF, OVA (0) | 2026.02.10 |
| Ubuntu 한글 입력 설정 (0) | 2026.02.10 |
| VMware workstation 가상머신 설치 및 삭제 - 디스크 용량 관리 팁 (0) | 2026.02.10 |