컴파일러와 링커의 관계
- 컴파일러는 c++ 소스코드를 오브젝트 파일로 변환.
- 링커는 여러 오브젝트 파일과 라이브러리를 연결하여 실행 파일을 생성.
C++ 컴파일러
컴파일러 주요 작업
(1) 전처리(Preprocessing)
- 전처리기는 소스 코드를 컴파일하기 전에 **전처리 지시문(#include, #define 등)**을 처리한다
(2) Parsing 및 AST 생성
- 전처리된 소스 코드를 읽어 구문 분석을 수행한다.
- 코드를 AST(Abstract Syntac Tree)라는 구조로 변환하여 구조 이해
- 구문 분석 과정에서 문법 오류를 발견한다. (ex. 세미콜론 누락)
(3) IR (Intermediate Representation) 생성 및 최적화
- 컴파일러는 AST 기반으로 중간 표현(IR)을 생성한다.
- IR은 특정 플랫폼에 의존하지 않는 형식, 컴파일러가 최적화 (ex. 불필요한 변수 제거, 루프 최적화 등)
(4) 기계어(Machine Code) 생성
- 최적화된 IR을 대상 플랫폼의 기계어로 변환.
- 예: x86, x64, ARM 같은 프로세서 아키텍처에 따라 코드가 다르게 생성됨.
- 이 단계에서 오브젝트 파일(.o, .obj)이 생성
링커의 역할