1619, 1/81 회원가입  로그인  
   wolverine
   [자작] C 강좌 [1] - Compiler Tool Chain

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=2033 [복사]


안녕하세요. C 언어 강좌를 올리려고 합니다.
약 10여년을 embedded software 개발을 해오면서
알게된 지식들을 회원 여러분과 함께 공유하려고 합니다.
혹시라도 강좌에 오류나 궁금한 점은 언제라도 알려주시기 바랍니다.

C언어를 공부하다 보면, C/C++ Compiler Tool Chain이라는 말을 접하게 됩니다.
이번 강좌에서는 Compiler Tool Chain이란 무엇인가에 대해서 살펴보도록 하겠습니다.

# Compiler Tool Chain
- C code를 실행가능한 binary로 만들기 위해서 필요한 tool 들의 집합

Tool Chain은 기본적으로 다음과 같은 파일들을 포함하고 있다.
- compiler, linker 실행파일
- 기타 source build를 위한 utility 실행 파일들
- 제공하는 library 및 header 파일들
- 문서

Source Code는 compiler에 의해서 object code 형태로 변환이 되고,
object code는 linker에 의해서 실행 가능한 binary 또는 library로 변환이 됩니다.

예를 들어서 window pc에서 c programming을 하기 위해서는
compiler tool chain이 필요합니다.
http://www.mingw.org/ 에서 mingw라는 무료 c compiler tool chain을 다운받아서 사용할 수도 있고,
Microsoft VC++을 설치해서 사용할 수도 있습니다.
이경우에는 window pc에서 Build(Compile & Link)한 결과물이 .exe 파일 형태의
실행파일로 나오게되며, 이것은 window pc에서만 실행될 수 있습니다.

Note:
IDE(Integrated Development Environment)와 Compiler Tool Chain은 다른 의미 입니다.
mingw는 순수한 compiler tool chain만 지원합니다.
VC++은 IDE를 설치하게되면, IDE와 compiler tool chain이 자동적으로 같이 설치됩니다.
IDE는 compiler tool chain + source code editor + debugging 환경 등을 GUI application으로
통합적으로 만들어 놓은 개발 tool 입니다.
IDE는 Mouse click 및 메뉴 조작으로 source code를 쉽게 build(compile & link) 할 수 있도록
만들어 놓은 application 이며, 최종적으로는 compiler tool chain을 실행시켜서 build를 수행합니다.
반면에, compiler tool chain은 GUI를 지원하지 않는 console application 들의 집합입니다.
(IDE를 사용하지 않고도 dos 창에서 직접 compiler tool chain을 이용해서 build가 가능...)

또한, ARM core에서 구동되는 software(firmware)를 만들기 위해서는
해당 ARM core를 위한 compiler tool chain이 필요합니다.
이 경우에는 window pc에서 해당 compiler tool chain을 이용해서,
ARM core를 위한 software(firmware)를 build하고,
build 한 결과물은 해당 ARM core에서만 실행(구동) 될 수 있습니다.
이러한 경우에는 Cross Compiler Tool Chain이라고 합니다.
(Build하는 system(PC)와 실행되는 system(ARM core)이 서로 다를 경우...)

Compiler를 구동하기 위한 입력은 크게 source file과 option입니다.

예를 들어서,

compiler.exe source.c source.obj option1 option2 ...

이라고 명령을 치면, source.c는 해당 option에 의해서 source.obj 로 compile이 됩니다.
이때에 option은 각각의 compiler마다 다릅니다.
따라서, 개발자는 사용하고자 하는 compiler tool chain의 문서를 보고,
어떠한 option이 어떻게 사용이 되는지 미리 확인을 해야 합니다.

Linker를 구동하기 위한 입력은 크게 object file과 option, 그리고 linker command file입니다.

linker.exe obj1 obj2 obj3... option1 option2 ... linkerCommandFIle

이라고 명령을 치면, 각각의 obj1,2,3..가 모두 linker에 의해서 linking이 되어
하나의 실행가능한 파일로 변환이 됩니다.
이때에, option 또한 compiler tool chain마다 약간씩 다르기 때문에,
개발자는 제공되는 문서를 미리 공부해야 합니다.

Linker command file이라는 것은 개발자가 원하는 memory allocation을 linker에게 알려줍니다.
Linker command file 크게 두가지로 구성이 됩니다.
- memory description
  Build된 실행파일이 돌아갈 system의 memory 구조를 linker에게 알려줌
- memory allocation
  실행파일이 만들어 질 때 개발자가 원하는 형태로 memory allocation을 설정할 수 있음
  Stack의 위치 및 크기
  Heap의 위치 및 크기
  Code의 위치 및 크기
  기타 Global 변수들의 위치 지정등
Linker command file의 문법 또한 각각의 tool chain마다 서로 다릅니다.
개발자는 제공되는 문서를 공부해야만 합니다.

하나의 core processor에 대해서도 서로 다른 Compiler Tool Chain들이 존재할 수 있으며,
대부분의 compiler tool chain은 기본적인 사용법이 같지만,
지원하는 option이나 문법등에서 약간의 차이가 있을 수가 있습니다.
따라서, 개발자는 항상 같이 제공되는 문서를 먼저 study 하는 습관을 들여야 할 것 같습니다.
그러한 문서를 직접 읽어가면서 얻는 지식들이야 말로 참지식인 것 같습니다.

전체적인 큰 그림을 봐야 합니다.
요즘은 대부분 VC++과 같은 IDE를 제공하기 때문에,
make file 까지 공부하지는 않더라도,
IDE에서 menu 설정 및 click을 했을때에,
compiler tool chain에서 어떠한 동작들이 이루어지게 되는지
큰 그림을 그릴 수 있어야 합니다.

또한, 자신이 사용하고 있는 compiler tool chain에 대한 문서를 공부해야만,
IDE를 사용할 때에, GUI에 의해서 설정되는 option들을 잘 사용할 수 있습니다.
IDE는 사용하다가 보면 자연스럽게 터득되지만,
compiler tool chain의 자세한 사용법은 문서를 자세히 봐야 합니다.

이렇게 하나의 tool chain에 대해서 습득이 되면,
다른 processor나 다른 compiler tool chain을 사용하게 되더라도,
빠른 시간 안에 쉽게 적응(?)이 가능하게 됩니다.

이상으로 이번 강의는 마칩니다.

Best Regards,
Wolverine












  Hit : 10323     Date : 2012/07/04 11:12



    
pkw5240 오!! 예쩐에 주워들었던 것들이
지금 이글을 읽음으로써 정리가 된거같아요! ㅎㅎ감사합니다!
2012/07/11  
wolverine 도움이 되었다니 다행이네요. 감사합니다. 2012/07/11  
show1546 감사합니다 우와 강의 정말 짱이에요 2012/07/17  
kbg06163 아직은 잘 모르겟습니다 ㅠㅠ, 2012/07/28