2011/05/27 12:19

C와 Java의 컴파일 과정


C와 Java의 컴파일 과정에 대해서 찾아보는 중에 좋은 책을 찾았다. 국내 웹에는 C의 컴파일 과정에 대한 내용밖에 없었다. Reverse Engineering Software[1]라는 책인데 2장에 컴파일 과정에 대한 내용이 나와 있었다.

1. C Compile
아래는 C의 컴파일 과정이다. 

Figure 1. 컴파일 과정(출처 : [1])

1.1 Preprocessor
C는 다른 언어의 컴파일러와 다르게 전처리 과정이 들어간다. 전처리([3] 참조)는 컴파일에 앞서 필요한 처리를 해주는 것이다. 전처리문에는 다음과 같은 것들이 있다. 

Table 1. 전처리문의 종류
 전처리문 기능 
 #include  디스크상의 파일을 편입
 #define  매크로를 정의
 #undef  정의되어 있는 매크로를 취소
 #if~#dndif  조건부 컴파일
 #line  행번호 제어

소스코드는 전처리 과정을 거쳐 source.c 소스코드를 source.i 파일로 만든다.

1.2 Parser
[5]를 참조하였다.
Parser란 컴파일 과정중 구문 분석을 담당하는 Syntax Analyzer이다. 스트링을 입력으로 받아 문법의 문장이 맞는지 아닌지를 확인하여 아니라면 에러 메시지를 출력한다.

1.3 Translation
source.i 파일은 C 컴파일러인 cc1에 의하여 어셈블리 코드인 like.s로 컴파일한다.

1.4 Assembler
source.s를 as 어셈블러에 의해 어셈블 과정을 거쳐 source.o 오브젝트 파일로 생성한다.

1.5 Linker
source.o 파일은 다시 Linker에 의해 libc.a와 같은 표준 C 라이브러리와 링크하여 최종적으로 실행 파일인 source 파일을 만들게 된다. 

1.6. Disk
1.7 OS Exe Loader

 
 
2. Java Compile 

Figure 2. Java 컴파일 과정(출처 : [1])

자바의 컴파일 단계는 더 상세하게 나온 것이 없었습니다. 

2.1 컴파일
Compiler에 의해서 source.java를 source.class로 만들어줍니다.

2.2 실행
class파일을 JRE(Java Runtime Environment)에 의해서 플랫폼에 상관없이 실행되게 해줍니다.

Reference
[1] 2. The Compile Process (http://www.acm.uiuc.edu/sigmil/RevEng/ch02.html)
[2] JAVA의 컴파일 과정 (http://blog.naver.com/rapha0?Redirect=Log&logNo=110080053861) 
[3] C 컴파일 과정의 전처리문 (http://www.cworldlab.com/CandCplus/c/c-6.htm) 
[4] GCC를 이용한 C소스의 전체 컴파일 과정 (http://ttongfly.net/zbxe/?document_srl=45255)
[5] Parser의 의미 (http://blog.naver.com/ldldldld04?Redirect=Log&logNo=10014127447
 
Trackback 0 Comment 1


티스토리 툴바