본문으로 바로가기

[C] 컴파일 과정

category 프로그래밍/C 2018. 3. 31. 01:51
728x90
반응형

안녕하세요.


오늘은 C언어의 컴파일 과정을 알아보겠습니다.


만약 여러분이 C언어로 코딩 작업을 완료한 후, 실행을 하려면 컴파일을 해야됩니다.


컴파일이란 


사람이 이해할 수 있는 언어로 되어 있는 프로그램 코드를 컴퓨터가 이해할 수 있는 언어로 변환하는 작업입니다.


쉽게 말하면 사람의 언어를 컴퓨터의 언어로 번역하는 것이라고 보시면됩니다.


초보 개발자 기준에서 컴파일 과정을 정확히 아는 분은 많이 없을 거라고 봅니다.


차근차근 한번 살펴보겠습니다.


 

 

 



리눅스에서 일반적으로 사용하는 gcc를 사용하면 어떻게 컴파일되는지 아래에서 보겠습니다.


test.c ---(1)---> test.i ---(2)---> test.s ---(3)---> test.o ---(4)---> test


크게 4단계를 거치게 됩니다.


컴파일러로 컴파일을 하게되면 test.c 파일이 test. 바이너리로 됩니다.


바이너리를 실행하면 바이너리의 내용들이 메모리(RAM)에 적재되어 동작을 합니다.


각각의 컴파일 과정에 대해 알아보겠습니다.


1. 전처리기

test.c ------> test.i


전처리기는 주요한 2가지 기능을합니다.


-헤더파일 처리

-매크로 적용


c언어의 소스 내에 헤더파일을 include 합니다.

함수를 사용하기 전에 함수의 원형을 먼저 선언해야 되기 때문입니다.

또한 #define으로 매크로도 만듭니다.


이런 헤더파일과 매크로들에 대한 처리를 전처리기에서 합니다.


2. 컴파일러

test.i ------> test.s


사람이 이해할 수 있는 프로그래밍 언어를 컴퓨터가 이해할수 있도록 변환합니다.


 

 

 



3. 어셈블러

test.s ------> test.o


컴파일이 끝난 어셈블리 코드는 어셈블러가 기계어로 바꿔줍니다.


어셈블러에 의해 생성된 목적파일은 어셈블러에 의해 바뀐 프로그램의 명렁어와 데이터로 구성된 ELF구조를 갖습니다.


4. 링커

test.o ------> test


마지막 링커에서는 목적파일들과 표준 C 라이브러리, 사용자 라이브러리들을 링크시킵니다.

표준 라이브러리들은 미리 컴파일이 되어 있기 때문에, 신경쓰지 않아도 됩니다.


 

 



이렇게 바이너리(실행할 수 있는 파일)가 만들어집니다.



728x90
반응형