관리 메뉴

Leo's Garage

Compile 두번째 이야기 본문

Embedded/Embedded SW 이야기

Compile 두번째 이야기

LeoBehindK 2020. 1. 12. 20:56
728x90
반응형

이번에 할 이야기는 임베디드 시스템에서 Compile을 할 때 실제로 어떤식으로 binary code가 나오는지 이야기해보도록 하겠다.

 

앞 서 말한 것과 같이 흔히 ~.c file 하나를 Compile한다고 하면, C file을 기계가 알아들을 수 있는 Native code의 집합인 Binary Image를 만들어내는 것이라고 이해하고 있다. 맞는 이야기이다. Binary Code를 뽑아내기 위해서는 C file과 header file들을 이용하게 되고 때때로는 s file도 사용하게 되는데 s File은 Assembly Code로 가끔 개발자가 판단할 때, C로 Code를 짜는 것보다 직접 Assembly로 짜는게 더 낫다는 생각이 들면 s file을 만드는 경우도 있다.

 

 

일반적인 Compile 과정

 

어쨌든 결론적으로 이야기하면, 사람이 짠 C Code를 C compiler가 Assembly로 만들고 Assembler가 실행이 가능하면서 각각의 Symbol정보를 가지고 있는 ELF(Excutable and linkable format)을 만들어 내는 것이다. 

 

 한 가지 생각해보아야 할 점은 우리가 흔히 마주하는 Software는 단순히 하나의 C file, header file로 구성되어 있지 않다는 점이다. 집에서 짜는 간단한 프로그램이야 그렇게 할 수 있지만 보통 기업에서 접하게되는 프로그램들은 적게는 수십 개 많게는 수천 개의 코드들을 모아서 Compile해야 원하는 동작을 하는 경우가 많다. 

 

이러한 문제에 봉착했을 때, 사람들은 이것을 해결하기 위한 또 다른 새로운 컨셉을 만들게 된다. 바로 link이다. link는 여러 c file들을 assembly로 만든 다음에 이 assembly 들을 assembler를 이용하여 Object라고 하는 새로운 형태로 바꿔 준 뒤, 이러한 Object들을 연결해주는 것을 말한다. Object라는 형식에는 다른 Object와 연결할 수 있는 정보나 Debugging할 수 있는 symbol 정보도 포함하고 있다. 이러한 형태는 ELF 형식을 이야기하는 것으로도 볼 수 있으며 결국 ELF 형태를 따르는 Object 파일을 Linker를 이용해서 link할 수 있는 것이다. 

 

한 가지 더 이야기하자면, Preprocessor(전처리기)라는 동작이 있는데, 이는 compile을 하기 전에 source code 내부의 syntax를 정리하는 것을 의미한다. C Processor와 lint Processor를 이용하여 macro나 define 등을 바꿔치기 해놓는 것이다.

 

 

 

 

GALAX 지포스 그래픽카드 RTX 2060 BLACK D D6 6GB

파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음

728x90
반응형

'Embedded > Embedded SW 이야기' 카테고리의 다른 글

Preprocessor (전처리기)  (0) 2020.01.17
Compile  (0) 2020.01.07
Embedded SW Design  (0) 2020.01.06
Comments