Sử dụng GCC biên dịch C/C++

GCC là gì ?

    GCC là một trình biên dịch. Nó là một bộ công cụ biên dịch mạnh mẽ được sử dụng rộng rãi để biên dịch mã nguồn từ các ngôn ngữ lập trình như C, C++, Objective-C .., và nhiều ngôn ngữ khác thành mã máy (mã nhị phân có thể thực thi trên hệ điều hành).

How to use gcc to compile on linux

Tại sao cần dùng GCC ?

    Khi bạn bắt đầu làm quen với lập trình code C/C++ để có thể chạy được thông thường các bạn sẽ tải thêm thêm IDE (Integrated Development Environment)

What is an IDE? How Does It Enhance Programming Efficiency? | Interview  Kickstart

    Một IDE là một môi trường tích hợp đầy đủ có hỗ trợ đồ họa cho debugging và các công cụ quản lý dự án phức tạp ví dụ như Code::Blocks , Dev C/C++ hoặc Visual Studio,... . Lưu ý Visual Studio Code là 1 Code Editor, chưa phải 1 IDE. 
Do đó việc sử dụng Visual Studio Code hoặc đơn giản là Notepad , để gõ code sau đó sẽ dùng GCC để biên dịch tuy cùng với mục đích cuối cùng là tạo ra mã máy thực thi nhưng sẽ có 1 số ưu điểm sau đây :
    - 
Nhẹ hơn và Tùy biến linh hoạt hơn  

   - Khả năng tương thích đa nền tảng: Cái này mình thấy là quan trọng nhất. Bạn có thể gõ code ra 1 file .c .cpp ở bất kỳ đâu để chạy mà không cần cài 1 IDE đầy đủ. Bởi có những IDE chỉ có trên Windows như Visual Studio, 1 project của bạn sẽ nằm trong 1 Solution, khó để mang sang các hệ điều hành khác.

Cách cài đặt GCC trên Windows và Ubuntu

👉👉Sử dụng GCC sẽ giúp bạn hiểu rõ hơn về cách máy tính chạy từ bước gõ code cho đến khi ra đến file thực thi .

Build Process trong C

    Quá trình xây dựng (Build Process) là một chuỗi các bước xử lý mà trong đó các file mã nguồn (như .c, .cpp, ...) được sử dụng làm đầu vào, và kết quả đầu ra là các file nhị phân có thể sử dụng (hex, bin, exe,...).   

Sử dụng GCC thế nào ?

 Build Process bao gồm 4 giai đoạn  

 Ví dụ ta có 1 file main.c (bên trái) và file library.h (bên phải) như sau
 

 

    Tiền xử lý (Preprocessing):     

    Chỗ nào có chỉ thị tiền xử lý sẽ được xử lý 😀. Dấu hiệu nhận biết là ký tự '#' ví dụ như #include, #define, #ifdef, .... Cùng với đó là các macro và comment. Ta gõ câu lệnh

gcc -E main.c -o main.i

     File main.i ta thu được sẽ có kết quả như sau

        👉#inlcude "library.h" : được xử lý bằng cách thêm cả thư viện library.h vào vị trí include

        👉#define A 1 : Tìm chỗ nào có ký tự A đứng đơn lẻ sẽ thay trực tiếp giá trị được định nghĩa vào 

        👉//Comment : đươc xóa khỏi file

    Biên dịch (Compiling):

    Quá trình này sẽ biên dịch các file .i bên trên sang mã máy, tạo ra file main.s là file assembly . Các bạn gõ câu lệnh 

    gcc -S main.i -o main.s

 

    Assembling

    Bước này ta sẽ sử dụng Assembler chứ không dùng Compiler nữa. Nó sẽ gộp các file assembly vừa tạo với các file assembly có sẵn tạo thành các file object 

as main.s -o main.o

 

Với file này thì ta sẽ phải dùng các phần mềm chuyên dụng mới đọc được nội dung, các bạn có thể đọc thêm với keyword Reverse Engineering (Cũng là cách để cách hacker tìm cách crack được phần mềm 😀😀)

    Linking

    Sau khi đã có file object rồi ta sẽ link các file object với static libray có sẵn

gcc -v -o main main.c

    Kể quả sau cùng sẽ ra file main.exe trên windows hoặc main trên Ubuntu. Các bạn chỉ cần gõ main hoặc main.exe là chương trình sẽ được thực thi.
Đây là một vài câu lệnh cơ bản nhất.


Các bạn đọc tiếp hướng dẫn về Makefile để có thể tự động hóa được quá trình build process.



 
 

Đăng nhận xét

0 Nhận xét