프로그래밍/CS및OS

3. 컴파일러의 실행 과정

데일리 백수 2025. 5. 14. 12:37

컴파일러의 실행과정은 크게 4단계로 분리할 수 있습니다.

 

소스 코드 (.c, .cpp)
     ↓
[1] 전처리 (Preprocessing)
     ↓
[2] 컴파일 (Compilation)
     ↓
[3] 어셈블 (Assembly)
     ↓
[4] 링크 (Linking)
     ↓
실행 파일 (.exe, a.out)

 

의 과정을 거치며 소스코드를 최종 컴퓨터가 실행가능한 실행 파일로 변환해줍니다.

 

1단계: 전처리 (Preprocessing)

.c 또는 .cpp.i 파일 생성

 하는 일:

  • #include헤더 파일 코드 삽입  
  • #define매크로 치환
  • 조건부 컴파일 (#ifdef, #ifndef)
  • 간단하게 #은 전처리 단계에서 처리된다고 생각하면 편하다!

예시

#include <stdio.h>
#define PI 3.14

//전처리 후 
// stdio.h의 모든 코드 삽입
// PI는 3.14로 치환됨
 
 

명령어:

gcc -E main.c -o main.i

2단계: 컴파일 (Compilation)

전처리된 .i어셈블리 코드 .s 생성

 하는

  • C/C++ 문법 분석 (문법 오류 잡기)
  • 어셈블리 코드로 변환 (mov, add 등)
  • 코드 최적화 수행
  • 이 과정에서 코드 최적화/에러 검수 및 실제 어셈블리 코드로 변환이 이루어짐  

명령어:

gcc -S main.i -o main.s

3단계: 어셈블 (Assembly)

어셈블리 .s목적 코드 .o (기계어)

하는 일:

  • 어셈블리 명령어를 기계어(이진코드)변환
  • 이진 .o 파일은 아직 단독 실행 불가
  • 어셈블리와 기계어는 다르다. 
 

 4단계: 링크 (Linking)

.o + 라이브러리 → 최종 실행파일 .exe, a.out

하는 일:

  • 외부 함수 연결 (printf, malloc 등)
  • 여러 .o 파일 결합 (main.o, util.o, math.o)
  • 실행 가능한 프로그램 생성
  • 컴파일은 소스코드만 컴파일
  • 링크는 필요한 외부 코드만 가져와 유연하고 빠르다.
 
 

요약표

단계입력출력설명
전처리 .c/.cpp .i 매크로 치환, 헤더 삽입
컴파일 .i .s 어셈블리 코드 생성
어셈블 .s .o 기계어 목적 파일 생성
링크 .o 실행파일 실행 가능한 최종 프로그램