Skip to content

C toolchain

Series này đi theo một chương trình C từ source đến khi nó chạy trên target, và các công cụ dùng để build, debug, phân tích nó. Mỗi bài trả lời một câu hỏi, đi từ bên trong ra bên ngoài.

source ──▶ object ──▶ executable ──▶ process
 (1)        (2)         (3)           (4)
        └──── build nhiều file (5) ────┘
        └──── cross compile (6) ────────┘
        └──── debug & phân tích (7) ────┘
Bài Câu hỏi Mức độ
1. Build pipeline gcc hello.c thực sự làm những gì? Chi tiết
2. Object file và ELF Bên trong file .o có gì? Chi tiết
3. Linking Linker ghép các file thế nào, static vs shared khác gì? Chi tiết
4. Từ executable đến process Gõ ./hello thì chuyện gì xảy ra, memory layout ra sao? Giới thiệu
5. Build nhiều file Chia project thành nhiều file .c/.h và build lại đúng phần cần thiết? Giới thiệu
6. Cross compile Build trên host x86-64, chạy trên ARM target? Chi tiết
7. Debug và phân tích Tìm lỗi, đo kích thước, giảm kích thước binary? Chi tiết

Môi trường dùng trong các ví dụ

Output trong series được chạy thật trên Ubuntu 24.04, GCC 13.3, binutils 2.42 (x86-64). Phần cross compile dùng arm-linux-gnueabihf-gcc và aarch64-linux-gnu-gcc cùng bản 13, chạy thử bằng qemu-user. Địa chỉ và đường dẫn trong output có thể khác trên máy bạn.

Bài trước: C introduction.