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
 
신고

'Software > 정리 글' 카테고리의 다른 글

적정 스레드 수  (0) 2013.05.20
Qt(Qt Development Frameworks)란 무엇인가?  (0) 2012.04.16
정규식 예제  (0) 2012.03.29
Java에서 JNI를 써서 핑 프로그램을 구현하는 이유  (0) 2012.01.30
버전 관리 & 이슈 관리 시스템  (0) 2011.06.07
C와 Java의 컴파일 과정  (1) 2011.05.27
난수 발생기  (2) 2010.06.23
SnmpWalk  (0) 2010.04.27
객체 지향 원칙  (0) 2008.08.21
리소스 지향 아키텍처(ROA)  (0) 2008.07.29
검색엔진  (1) 2008.07.17

Comments

  1. 10박대규 2011.10.04 23:12 신고 Permalink Modify/Delete Reply

    #if ~ #dndif
    #endif 아닌가요?

Leave a Comment


to Top