기록하는삶

[CS/컴퓨터 구조] C언어 컴파일 과정 본문

CS(Computer Science)

[CS/컴퓨터 구조] C언어 컴파일 과정

mingchin 2023. 3. 9. 00:04
728x90
반응형

C 혹은 C++ 등의 언어로 작성된 프로그램을 실행할 수 있는 binary 파일로 변환하는 과정을 컴파일이라 하는데, 아래 4개의 세부 동작을 거쳐 진행된다.

1) Pre-processor(전처리기 _ file.cpp → file.i)

  • #으로 선언한 코드들을 먼저 처리
  • 외부에 선언된 소스코드, 라이브러리 등 불러오기 (#include)
  • 매크로 변환 (#define)
  • 컴파일 영역 명시 (#if, #ifdef)
  • 변환 결과는 여전히 소스코드

2) Compiler(컴파일러 _ file.i → file.s)

  • 소스 코드를 어셈블리어로 변환
  • 동일한 소스 코드에 대한 변환 결과라 하더라도 CPU와 환경에 따라 달라질 수 있음

3) Assembler(어셈블러 _ file.s → file.o)

  • 어셈블리어를 기계어로 변환(binary file)
  • 목적 코드를 포함하는 목적 파일로의 변환 (실행파일 x)

4) Linker(링커 _ file.o → file.exe)

  • 외부 선언 코드, 라이브러리 등 여러 목적 파일을 연결해 하나의 실행 파일로 변환

 

gcc 컴파일러를 활용하면 아래와 같은 코드로 각 과정을 나누어 해볼 수 있다.

# 전처리기로 .i 파일 생성
gcc -E file.c -o file.i

# 컴파일러로 .s 파일 생성
gcc -S file.i -o file.s

# 어셈블러로 목적파일 .o 생성
gcc -c file.s -o file.o

# 목적파일 열어보기
hexdump -C file.o or xxd file.o

# 링커로 실행파일 .exe 생성
gcc file.o -o file.exe
728x90
반응형