본문 바로가기
lesson/Operating System

C언어가 실행 파일이 되는 과정까지

by Peter Choi 2024. 10. 9.
반응형

출처: https://www.geeksforgeeks.org/compiling-a-c-program-behind-the-scenes/

 

이 글은 gcc라는 소프트웨어를 통해서 C/C++ 소스 코드 파일을 직접 실행했을 때의 중간 과정들을 기록하기 위한 목적으로 작성되었습니다. 일반적으로 visual studio 의 MSVC 컴파일러를 통해서 c 소스 코드를 작성하는 방법도 있습니다만, 비주얼 스튜디오의 제일 주된 목적은 윈도우에서 실행 가능한 C++ MFC, C# 클라이언트 프로그램(워드, 엑셀, ppt ...etc) 을 작성하는 것이고 거기에 최적화되어있습니다. 

 

0. 소스 코드 작성(.c 파일)

당연한 얘기겠습니다. c파일이 있어야 전처리를 하든 컴파일을 하든 할 수 있을테니까요. 

~$ vi example.c

이러한 vi 명령어를 통해 c언어 파일을 작성합니다.  

 

1. 전처리(.c 파일 => .i 파일)

~$ gcc -E -o one.i one.c

이제 c언어 소스 코드 파일이 있으면, 먼저 /**/, // 와 같은 주석을 제거하고 #include <> 등에 wrapped되어있는 헤더의 내용들을 unwrap하는 과정이 필요합니다. 이 과정에서 .i 파일은 .c 파일보다 내용이 더 많아집니다.  

 

2. 컴파일(.i 파일 => .s 파일)

~$ gcc -S -o one.s one.c  

이제 컴파일 과정을 통해서 .i 파일에서 0과 1인 기계어와 1대1 직접 호환되는 어셈블리 코드가 생깁니다. 

 

3. 어셈블러(.s 파일 => .o 파일)

~$ gcc -c -o one.o one.c 

이러한 어셈블리 코드도 결국 컴퓨터가 직접 이해할 수 있는 0과 1로 이뤄진 코드로 변환되어야 합니다. .o 파일은 이러한 형식으로 가공이 됩니다.  

 

4. 링커(.o 파일 => 실행 파일)

~$ gcc -o one one.c

링커는 일반적으로 단어 그대로, 여러 요소들을 연결하는 과정입니다. 원래는 리눅스에서 아래와 같이, 여러 c언어 소스 코드들을 묶어주는 역할을 한다. 이 과정에서 직접 실행할 수 있는 묶여진 파일이 생성이 된다.

 

반응형

댓글