기록하는삶
[CS/컴퓨터 구조] C언어 컴파일 과정 본문
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
반응형
'CS(Computer Science)' 카테고리의 다른 글
[CS/컴퓨터 구조] CPU와 레지스터 (0) | 2023.03.19 |
---|---|
[CS/컴퓨터구조] 프로세스와 쓰레드, 파이썬의 병렬 처리 (1) | 2023.03.15 |
[CS/컴퓨터 구조] ALU의 기본 구조, input과 output (0) | 2022.03.20 |
[CS/컴퓨터 구조] 컴퓨터의 숫자와 문자 표현, 부동소수점, ASCII, 유니코드 (0) | 2022.03.13 |
[CS/컴퓨터 구조] 논리 회로의 기초, Not/And/Or/Xor Gate (0) | 2022.03.09 |