Computer Science/Computer Architecture

01. C언어 컴파일 과정

코딩준우 2023. 12. 16. 15:26

컴퓨터 시스템 제3판 - Randal E. Bryan,David R. O'Hallaron   p.5

#include <stdio.h>


int main(){
    printf("Hello, World!\n");
    return 0;
}

 

 

Pre-processor (전처리 단계)

#문자로 시작하는 디렉티브에 따라 수정한다.

#include <stdio.h>는 전처리기에게 시스템 헤더파일인 stdio.h를 프로그램 문장에 직접 삽입하라고 지시한다.

그 결과 텍스트 파일 hello.i  생성한다. 

 

Compiler (컴파일 단계)

컴파일러는 텍스트파일 hello.i를 텍스트 파일인 hello.s로 번역하며, 이 파일에는 어셈블리어 프로그램이 저장된다.

 

 

Assembler (어셈블리 단계)

어셈블러가 hello.s를 기계어 인스트럭션으로 번역하고, 이들을 재배치가능 목적프로그램의 형태로 묶어서 hello.o라는 목적파일에

그 결과를 저장한다. hello.o 에는 main 함수의 인스트럭션들을 인코딩하기 위한 17바이트를 포함하는 바이너리 파일이다.

 

Linker (링크 단계)

표준 C 라이브러리에 들어있는 printf 함수를 호출하는 것에 주목할 필요가 있다.

printf 함수는 이미 컴파일된 별도의 목적파일인 printf.o에 들어 있으며, 이 파일은 hello.o 파일과 어떤형태로든 결합되어야 한다.

링커 프로그램(ld)이 이 통합작업을 수행한다. 그 결과 hello 파일은 실행가능 목적파일(실행파일)로 메모리에 적재되어 시스템에 의해

실행된다.