블로그 이미지
하양앙마

카테고리

분류 전체보기 (11)
iPhone (0)
오픈 플랫폼 BSP (11)
업무일지 (0)
Total
Today
Yesterday

달력

« » 2024.5
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 31

공지사항

최근에 올라온 글

'컴파일 과정'에 해당되는 글 1건

  1. 2010.05.12 C언어 컴파일 과정 (VC++ 기준)

C언어 컴파일 과정 (VC++ 기준)

C언어를 통하여 소스파일의 컴파일 과정에 대해서 알아보겠습니다.


위의 그림은 C언어 컴파일 과정을 나타낸것입니다. (위의 그림은 리눅스환경으로 일부확장자가 다를수도 있습니다.)

에디터(메모장)를 이용하여 Hello.c를 작성하여 VC++의 컴파일러를 통하여 컴파일을 하게 되면

첫번째. Preprocessor(전처리기)

 #include "filename"
− 이 행은 filename 파일의 사본으로 대치됨
− filename 파일은 먼저 현재 디렉토리에서 검색하고, 거기에 없다면 시스템이 정의한 디렉토리에서 검색함

#include <filename>
− 이것은 시스템이 정의한 디렉토리에서만 검색함
− UNIX 시스템에서 stdio.h와 stdlib.h 같은 표준 헤더 파일은/usr/include에 있음
− 일반적으로, 표준 헤더 파일이 저장된 장소는 시스템에 따라 다름

기본소소의 첫번째 줄인 #include <stdio.h> 라는 구문은 C언어의 구문이 아니라서
C 컴파일러가 읽어 들이지 못하는 현상이 발생합니다. 여기서 전처리과정을 통하여 C컴파일러가 알 수 있도록 변환과정을 마칩니다.

전처리과정을 마친후 파일생성이 Hello.i라는 파일이 생성됩니다.

두번째. Compiler(컴파일러)

전처리 과정을 마친 Hello.i를 C Compiler를 통하여 Assembler 언어로 변환과정을 마칩니다.
여기서 Hello.s라는 파일이 생성됩니다. VC++경우 Hello.asm이 생성됩니다.

세번째. Assembler(어셈블리어)

컴파일러를 통하여 에셈블리어 언어로 변환을 마친 Hello.s라는 파일을 이제는 에셈블리어과정을 거쳐 기계어로 변환과정을 마칩니다.
기계어로 작성된 Hello.o라는 파일이 생성됩니다. VC++경우 Hello.obj이 생성됩니다.

네번째. Linker(링커)

어셈블리어 과정을 마친 Hello.o라는 파일을 링커를 통하여 실행파일로 만들어주는 과정입니다.
링커과정을 마치면 드디어 Hello.exe라는 실행파일이 생성됩니다.

위의 그림에서 빠졌지만 Loader(로더)에 대해 간단한 설명을 하면
다섯번째. Loader(로더)

로더를 통하여 Hello.exe가 메모리에 적재되어 CPU가 처리를 할 수 있도록 이동 시켜주는 역할을 합니다.

위와 같은 과정을 거쳐서 소스파일이 컴파일 과정을 거쳐서 실행파일이 만들어지며 실행할 수 있습니다.

tip. VC++의 컴파일러의 CL.EXE를 통하여 컴파일을 하게 되면 Hello.obj와 Hello.exe만 생성되는데..
이것은 생성후 자동삭제 되는 현상으로서 이러한 파일을 보기 위해서는

cl /P Hello.c   ---> Hello.i 가 생성되며


cl /Fa Hello.c ---> Hello.asm 이 생성되는 것을 확인 할 수 있습니다.


Posted by 하양앙마
, |