반응형
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
[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)
반응형
'Devlopment > 정리 글' 카테고리의 다른 글
적정 스레드 수 (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 |
난수 발생기 (2) | 2010.06.23 |
SnmpWalk (0) | 2010.04.27 |
객체 지향 원칙 (0) | 2008.08.21 |
리소스 지향 아키텍처(ROA) (0) | 2008.07.29 |
검색엔진 (1) | 2008.07.17 |