gcc 컴파일 과정

Language/C 2011. 8. 23. 15:19

c언어로 작성된 파일이 있다하자. 그 파일 이름이 hello.c 라 가정한다. 그럼 다음과 같이 컴파일을 할 것이다.

# gcc –o hello.exe hello.c 

 

컴파일을 하면 다음과 같은 순서로 이루어진다.


★ 컴파일 과정

1. 소스코드( .c ) - 사용자에 의해 c언어로 작성된 소스 코드로 확장자가 c이다.
                           ex> hello.c

전처리 (Preprocessing)


2. 전처리 후 소스( .i ) - 전처리가 끝이 나면 i 확장자를 가진 파일이 생성된다. 
                                 본격적으로 C언어를 기계어로 변환하기 시작한다.

C 컴파일 (Compile)


3. 어셈블리소스 ( .s ) - 기계어와 가장 유사한 상태인 어셈블리어로 변환 된 s 확장자를 가진 
                                 파일이 생성된다.

어셈블리 (Assembly) 컴파일


4. 오브젝트 파일( .o ) - 2진수로 이루어진 기계어로 된 파일이 생성된다. 확장자는 o이다.

링크 (Link)


5. 실행파일 ( .exe ) - 링크에 의해 실행 할 수 있는 파일을 생성한다.



전처리에서 어셈블리까지의 과정에서 
중간 파일이 생성된다. 하지만 실행파일이 생성되면 그 과정에 생성되는 중간 파일들은 모두 삭제된다. 중간 파일의 내용이 궁금하다면 중간 파일만 생성하는 gcc 옵션들이 있다. 중간 파일만 생성하는 방법을 알아보자.


★ 중간 파일 생성 방법


1. 전처리 단계

# gcc -E -o hello.i hello.c 


(hello.c 소스코드를 전처리 해서 hello.i 파일에 저장한다.) 

2. 어셈블리 파일 단계 

# gcc -S -o hello.s hello.c 

 
(hello.c 소스코드를 컴파일해서 hello.s 어셈블리어 소스로 저장한다.)

3. 오브젝트 파일 단계

# gcc -c -o hello.o hello.c


 (hello.c 소스코드를 컴파일해서 링크 전 단계인 오브젝트 파일 hello.o 를 생성한다.) 

    

특정 단계까지만 컴파일하면 번거롭다 이를 모두 저장해주는 옵션 또한 존재한다. 컴파일 과정을 모두 출력하면서 각 단계마다 생성되는 중간 파일을 삭제하지 않고 모두 저장해주는 옵션이 있다. 


★ 전체 단계를 화면에 출력 및 저장하는 방법



# gcc -v --save-temps -o hello hello.c


1. -v 옵션
    컴파일되는 과정을 화면으로 출력한다.
2. --save-temps 옵션 
    컴파일 과정에서 발생되는 중간 파일을 지우지 않고 저장한다.

< 컴파일 과정 출력화면 >

  

< 생성 파일 >

 

'Language > C' 카테고리의 다른 글

[Linux/Unix]make 명령 코드 구현하기  (0) 2011.08.23
make (Makefile)  (1) 2011.08.23
Pthread API Reference  (0) 2011.08.23
static 함수  (0) 2011.08.23
static 전역 변수  (0) 2011.08.23
: