Computer Science/Computer Architecture
01. C언어 컴파일 과정
코딩준우
2023. 12. 16. 15:26
#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 파일은 실행가능 목적파일(실행파일)로 메모리에 적재되어 시스템에 의해
실행된다.