Biên dịch chương trình C++ trải qua 3 giai đoạn chính:
1. Tiền xử lý (Preprocessing)
C Preprocessor là công cụ thay thế văn bản. Xử lý các chỉ thị: #include, #define, #ifdef, #pragma,... Mở rộng header, thay thế macro, loại bỏ comment. Kết quả: file .i (C) hoặc .ii (C++).
2. Biên dịch (Compilation)
Biên dịch file tiền xử lý thành mã assembly (.s). Kiểm tra cú pháp, phân giải overload, type checking. Lỗi cú pháp, lỗi kiểu dữ liệu xảy ra ở đây. Kết quả: file object (.o / .obj) chứa mã máy nhưng chưa liên kết — có thể tham chiếu ký hiệu chưa định nghĩa.
3. Liên kết (Linking)
Linker kết hợp các file object và thư viện thành file thực thi (executable) hoặc thư viện động (.so/.dll). Thay thế tham chiếu chưa định nghĩa bằng địa chỉ thực. Nếu thiếu ký hiệu → lỗi linker (undefined reference). Thư viện ngoài chuẩn cần truyền flag linker (vd: -lm cho math).
Tóm tắt luồng
Source (.c/.cpp) | v Preprocessor -> Expanded source (.i/.ii) | v Compiler -> Assembly (.s) | v Assembler -> Object file (.o/.obj) | v Linker -> Executable / Shared Library
Lưu ý: File object có thể đóng gói thành thư viện tĩnh (.a/.lib) để tái sử dụng.