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