본문 바로가기
프로그래밍

컴파일 과정에 대한 설명

by Nessie! 2022. 6. 28.

컴파일 과정에 대한 내용을 본인 나름대로 보기 쉽게 작성해보았당당당당

(나중에 봤을 때 멍게소린지 모르겠을 때를 위해 쉽게 풀어서 말하기를 작성함)



컴파일(Compile)이란?
- 휴먼이 작성한 코드(프로그래밍 언어)들을 실행이 가능한 파일로 변환해주는 과정을 뜻한다.


쉽게 풀어서 말하기) 인간이 사용하는 프로그래밍 언어를 기계가 읽을 수 있는 기계어로 변환하여 변환된 내용을 가지고 프로그램으로 만들어 실행시켜줌


그렇다면 컴파일되는 과정에 대해 알아보자.

1. 전처리기(Preprocessor)
- #include 와 #define 와 같은 전처리기 매크로들을 처리하는 말 그대로 전처리단계를 말한다.
- 전처리 단계에서는 cpp 파일(소스파일)의 헤더파일을 읽어와 전처리된 .i 파일로 만든다.

쉽게 풀어서 말하기)
- #include 와 #define와 같이 소스 시작부분에 작성하는 #으로 시작하는 구문을 전처리기라고 한다. == 헤더파일
 ㄴ 이 헤더파일들은 인간이 편리함을 위해 방대한 내용을 간추려 놓고 불러다 쓰는 것이라고 볼 수 있는데, 이 방대한걸 풀어서 치환(?)해준다고 보면됨


2. 컴파일러(Compiler)
- 소스 파일을 어셈블리 명령어로 변환하는 컴파일 단계이다.
- 컴파일러는 이 .i파일을 컴파일 해 기계어와 가장 유사한 상태인 어셈블리어로 변환된 .s 파일을 생성한다

쉽게 풀어서 말하기)
- 전처리단계에서 풀어서 작성된 코드들을 이제 콤퓨타가 알아들을 수 있게 저수준의 언어(어셈블리)로 바꿔주는 작업을 하는 구간임
ㄴ 기계어에 가까울수록 저수준의 언어라고 한다.


3. 어셈블러(Assembler)
- 어셈블리 코드를 각 목적에 맞는 기계어로 변환하는 어셈블 단계이다.
- 생성된 목적 코드는 *바이너리 포맷(=체제) 구조를 가진다.
- 어셈블러는 .s파일을 어셈블 해 2진수로 이루어진 기계어로 된 .o 파일을 생성한다.

쉽게 풀어서 말하기)
- 컴파일러 단계에서 어셈블리 언어로 변환한 내용을 완전히 기계어로 변환하는 작업을 하는 구간임


4. 링커(Linker)
- 어셈블러에 의해 생성된 목적 코드 파일들과 이 프로그램에서 사용된 라이브러리도 함께 코드화되어 실행 가능한 파일이 만들어지는 단계. 
ㄴ 예를 들면 exe파일과 같은 실행파일이 생성된다

쉽게 풀어서 말하기)
- 위 세가지 과정을 진행하는 동안 여러가지 파일들이 생성되었고 그 파일들을 하나로 합쳐 하나의 실행파일(exe)로 만들어주는 작업을 하는 구간임.

 

 




아래부터는 위 내용들을 조사하며 추가적으로 탐색해본 내용입니다. (과제와 무관)

* 바이너리 포맷 구조란?
- 바이너리 포맷 : 데이터를 8비트로 구조화하기 위하여 사용하는 형식.
일반적으로 프로그램을 컴파일하여 생성되는 목적 프로그램 파일, 통신망을 통하여 데이터를 전송하기 위하여 사용하는 전송 데이터 파일에서 널리 사용된다.

- 바이너리 파일(binary file) : 데이터의 저장과 처리를 목적으로 0과 1의 이진 형식으로 인코딩된 파일을 가리킨다.

 

 


본 게시글은 아래 글을 참고하여 작성됨
https://dydtjr1128.github.io/cpp/2019/09/11/Cpp-Compile.html
https://reakwon.tistory.com/52

댓글