본문 바로가기
컴파일 순서에 따라 원하는 컴파일을 해보자 -

이제까지 컴파일 공장에 관한 이야기를 했으니까, 이제 여러 가지 컴파일을 해보면 재미있을  같습니다만, 동의하시는지요? 후후. 컴파일 공장이야기에서 보면 object (*.o) file 등장하게 되는데,  object file 다시 한번 살펴보면 이렇게 해석할  있겠습니다.

어차피 컴파일 과정이란 C 컴파일러인 tcc 또는 armcc 이용해서 ARM core에서 동작할  있는 Assembly 만든 , 다시 기계어 덩어리인 *.o file 만들어 내게 되는데,  *.o file안에는 object file이라고 하여 ARM 이해할  있는 기계어와 컴파일러가 최종 목적으로 하는 link단계를 처리할  있도록 symbol 정도 따위가 들어 있습니다. 따위라고 표현하니까 조금은 미안하네요. 결국엔 어떤 여러 개의 c file 컴파일 하게 되면, 각각의 c file마다 o file 결과물로 나오게 되어 있습니다. , 다들 아시는 얘기겠지만, 이런 원리라면 어떤 많은 양의 c file 컴파일  ,  파일이 컴파일 되었는지를 알아 보려면 같은 이름의 .o file 생성되었는지를 확인하면 간단하게 컴파일이 되었는지 확인할  있습니다. 예를 들어, spaghetti.c 컴파일 하면, spaghetti.o 생성되어 있어야 한다는 말이죠.

, 그럼 이제 ARM compiler tcc 이용해서 몇가지 컴파일을 해봐도 좋을  합니다. 예제 하나를 만들어서 컴파일을 해보도록 하죠. 이제부터 사용할 요리 재료는 다음과 같습니다. 계속 사용할 것이니까, 기억해 두시는 것이 좋습니다.

 

spaghetti.h -----------------------------------------

#define EQUAL =      /- 예제들에서 써먹을려고 일부러 EQUAL이라는 걸 두었다구요 *-
typedef struct {  bool memberBool;  int memberInt;  word memberWord;  }structure;

spaghetti.c ---------------------------------------------------------
#include "spaghetti.h" 

int zi EQUAL 0; int rw EQUAL 3;
extern int relocate EQUAL 3;
extern structure recipes [3];
int add(int a, int b);

main () {  int stack;  volatile int local,local2,local3;    local EQUAL 3;  locall EQUAL 4;    local2 EQUAL add (local, local2);  stack +EQUAL local3;  return stack;   }
int add (int a, int b) {  return (a+b); } 

 

컴파일을 연습할 file spaghetti.c이고,  file spaghetti.h 포함합니다. spaghetti.c에는 보통 우리가 시작 entry 사용하는 main() 들어 있고,  안에서 sub routine function으로 add()라는 함수를 갖고 있습니다. 결국 main()이라는 함수에서 add() 불러서 뭔가를 합하는 일을 하네요. 보통 이런 류의 글에서는 간단한 hello world 출력하는 프로그램들을 만들지만 - , 저는 개인적으로 hello world 보다 뭔가를  하는   좋아요 - 이런 code variable들이, global, local , 메모리에 어떻게 자리 잡는지 보여주기 편하니까, 또는 계속 하나 가지고 울궈 먹을  있으니까, 이걸로 하겠습니다. - 라고 편하게 넘겨 버립니다 -

 

 

 
Linked at 친절한 임베디드 시스템 개발자.. at 2009/10/01 12:32

... ⓓ 원하는 컴파일을 해보자 ... more

친절한 임베디드 시스템 개발자 되기 강좌 글 전체 리스트 (링크) -



댓글





친절한 임베디드 개발자 되기 강좌 글 전체 리스트 (링크) -