System Programming
[System Programming] 3. C Toolchain
잉숭
2021. 3. 10. 19:28
1. C PreProcessor(C 전처리기) : hello.c -> hello.i
#으로 시작하는 명령어들을 소스코드 내에서 수행한다
#include : 다른 파일을 insert (<>는 경로를 알때, ""는 경로를 모를때, 따라서 경로를 명시해야 한다)
#define : 심볼이나 매크로를 정의
#if/#endif : 조건의 참/거짓 여부에 따라 뒤의 문장들을 컴파일
#ifdef/#endif : 해당 심볼의 정의 여부에 따라 뒤의 문장들을 컴파일
전처리 명령어들은 세미콜론이 아닌 개행여부로 판단한다
2. C Compiler : hello.i -> hello.s
전처리된 소스코드들이 프로그래머가 지정한 아키텍쳐(ARM, Intel 등)에 따라 어셈블리 코드로 변환된다
3. C Assembler : hello.s -> hello.o
어셈블리 코드를 기계어 코드로 변환한다
4. Linker : hello.o -> hello.exe
symbol 테이블을 만든다 : (symbol 이름, symbol 위치) 쌍을 저장
만약 symbol 위치를 모르면 빈칸으로 남기는데 이는 프로그램 실행 중 동적으로 찾는다