일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- GeorgiaTech
- AWS
- 자동차sw
- 프로그래밍
- 블록체인
- can
- 토플
- 자동매매
- 확률
- AUTOSAR
- 백테스트
- 토플 라이팅
- 아마존 웹 서비스
- backtest
- TOEFL
- python
- 퀀트
- 비트코인
- Cloud
- 클라우드
- 개발자
- 파이썬
- probability
- 암호화폐
- it
- toefl writing
- backtrader
- 백트레이더
- 오토사
- Bitcoin
- Today
- Total
Leo's Garage
Compile 두번째 이야기 본문
이번에 할 이야기는 임베디드 시스템에서 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을 만드는 경우도 있다.
어쨌든 결론적으로 이야기하면, 사람이 짠 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 등을 바꿔치기 해놓는 것이다.
파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
'Embedded > Embedded SW 이야기' 카테고리의 다른 글
Preprocessor (전처리기) (0) | 2020.01.17 |
---|---|
Compile (0) | 2020.01.07 |
Embedded SW Design (0) | 2020.01.06 |