컴파일 과정

컴파일 단계

전처리, 컴파일, 어셈블, 링크를 분리해서 보면 오류 메시지가 어느 단계의 실패인지 판단할 수 있습니다.

전처리

포함과 매크로를 펼침

#include와 조건부 컴파일이 실제 번역 단위에 반영됩니다.

#include
컴파일

문법과 타입을 검사

C++ 문장을 목적 코드로 바꾸기 전에 이름, 타입, 표현식 규칙을 확인합니다.

source -> object
링크

여러 조각을 실행 파일로 묶음

다른 파일의 함수나 라이브러리 심볼을 찾아 최종 실행 파일을 만듭니다.

object + lib
실행

입력과 상태로 검증

배열 범위 초과나 0으로 나누기처럼 실행 중 조건에서 실패할 수 있습니다.

runtime state
단계 판별헤더를 못 찾으면 전처리, 타입이 맞지 않으면 컴파일, 정의가 없으면 링크를 의심합니다.
정적 링크필요한 코드가 실행 파일 안으로 들어가 배포는 단순하지만 파일이 커질 수 있습니다.
동적 링크실행 시 라이브러리를 찾으므로 업데이트는 쉽지만 배포 환경 의존성이 생깁니다.