Liên hệProfile
Danh mục

Mục Lục

    Hướng dẫn biên dịch C++ trên Linux với trình biên dịch G++

    Nguyễn Hưng

    Ngày đăng:

    11/03/2026

    Cập nhật lần cuối:

    11/03/2026

    Lượt xem:
    Chia sẻ
    Đánh giá
    5/5 - (1 bình chọn)

    Nguyễn Hưng

    Lượt xem:
    Ngày đăng:

    11/03/2026

    Cập nhật lần cuối:

    11/03/2026

    Mục lục

    Biên dịch C++ trên Linux là quá trình dùng trình biên dịch (thường là G++) để chuyển mã nguồn C++ thành chương trình thực thi có thể chạy trực tiếp trên hệ điều hành Linux. Trong bài viết này, mình sẽ hướng dẫn bạn quy trình chi tiết từ việc viết mã nguồn, biên dịch cho đến thực thi một chương trình C++ hoàn chỉnh thông qua dòng lệnh.

    Những điểm chính

    • Lợi ích của việc biên dịch C++ trên Linux: Hiểu rõ các lợi ích chính như tối ưu hiệu năng, tiết kiệm chi phí và khả năng kiểm soát hệ thống sâu rộng.
    • Cách biên dịch C++ trên Linux: Nắm vững quy trình 5 bước cơ bản để viết mã nguồn, lưu file, biên dịch bằng G++ và thực thi chương trình.
    • Những lưu ý khi biên dịch: Nắm được các lưu ý quan trọng để biên dịch hiệu quả, từ việc chọn chuẩn C++, quản lý thư viện đến việc sử dụng các cờ tối ưu hóa và gỡ lỗi.
    • Giải đáp thắc mắc: Có được câu trả lời cho các câu hỏi thực tế về sự khác biệt giữa g++gcc, nên chọn chuẩn C++ nào và khi nào nên dùng Clang thay thế.

    Lợi ích của việc biên dịch C++ trên Linux

    Linux là môi trường ưa thích của các lập trình viên C++ nhờ sự linh hoạt và hiệu suất cao. Dưới đây là những lợi ích chính:

    • Tối ưu hóa hiệu năng xử lý: C++ là ngôn ngữ biên dịch trực tiếp ra mã máy, khi kết hợp với các trình biên dịch hàng đầu trên Linux như GCC, Clang sẽ giúp tối ưu hóa mã nguồn, mang lại tốc độ thực thi nhanh chóng.
    • Tiết kiệm chi phí đầu tư: Toàn bộ hệ sinh thái công cụ phát triển trên Linux đều là mã nguồn mở và hoàn toàn miễn phí, giúp doanh nghiệp và lập trình viên cá nhân loại bỏ gánh nặng về chi phí bản quyền phần mềm khi triển khai các dự án lớn.
    • Khả năng kiểm soát hệ thống sâu rộng: Linux cho phép lập trình viên can thiệp xuống cấp độ nhân (Kernel), do đó bạn có thể tùy chỉnh, biên dịch lại hệ điều hành để loại bỏ các tính năng thừa, giúp tăng cường bảo mật và giảm thiểu tiêu tốn tài nguyên.
    • Tính di động và tương thích cao: Nhờ tuân thủ chuẩn POSIX, mã nguồn C++ viết trên Linux có khả năng tương thích rất tốt, giúp bạn dễ dàng chuyển đổi mã nguồn sang các hệ điều hành Unix-like khác để biên dịch lại mà không cần chỉnh sửa code quá nhiều.
    • Phạm vi ứng dụng đa dạng: Nhờ sự cân bằng giữa hiệu năng cao và khả năng kiểm soát phần cứng, C++ trên Linux là nền tảng tiêu chuẩn để phát triển từ phần mềm hệ thống, ứng dụng Desktop cho đến các giải pháp IoT và công nghệ tài chính.
    Lợi ích của việc biên dịch C++ trên Linux
    Lợi ích của việc biên dịch C++ trên Linux

    Bước 1: Viết mã nguồn C++

    Đầu tiên, bạn cần sử dụng một trình soạn thảo văn bản như nano, vim, gedit hoặc VS Code để soạn thảo mã nguồn. Dưới đây là một đoạn mã ví dụ đơn giản để in chuỗi ký tự ra màn hình:

    #include <iostream>
    
    using namespace std;
    
    int main() {
        cout << "Welcome To Geeks For Geeks For Geeks";
        return 0;
    }

    Bước 2: Lưu file mã nguồn

    Sau khi soạn thảo xong, bạn hãy lưu file với phần mở rộng là .cpp. Đây là quy ước bắt buộc để trình biên dịch nhận diện mã nguồn C++. Ví dụ:

    cplus.cpp

    Kết quả đầu ra như sau:

    Lưu file mã nguồn
    Lưu file mã nguồn

    Bước 3: Mở terminal và chuyển đến thư mục chứa file mã nguồn

    Bạn mở Terminal và di chuyển đến thư mục chứa file mã nguồn vừa tạo bằng lệnh cd:

    cd /duong/dan/den/thu_muc

    iconLưu ý

    Nếu bạn đã mở Terminal ngay tại thư mục chứa file, có thể bỏ qua bước này.

    Bước 4: Biên dịch chương trình với G++

    Đầu tiên bạn cài đặt trình biên dịch G++ với lệnh:

    sudo apt install g++

    Tiếp theo, bạn sử dụng trình biên dịch G++ để chuyển đổi mã nguồn thành mã máy (file thực thi).

    g++ cplus.cpp

    Kết quả sẽ hiển thị như sau:

    Biên dịch chương trình với G++
    Biên dịch chương trình với G++

    Giải thích:

    • Lệnh này sẽ đọc file cplus.cpp và thực hiện biên dịch.
    • Nếu không có lỗi cú pháp, G++ sẽ mặc định tạo ra một tệp thực thi có tên là a.out trong cùng thư mục.

    Bước 5: Thực thi chương trình

    Để chạy chương trình vừa biên dịch, bạn sử dụng lệnh sau:

    ./a.out

    Lúc này, kết quả sẽ hiển thị trên màn hình console như sau:

    Thực thi chương trình
    Thực thi chương trình

    Đặt tên tùy chỉnh cho file thực thi (tùy chọn)

    Mặc định G++ tạo ra file a.out và điều này có thể gây nhầm lẫn nếu bạn đang có nhiều chương trình. Để đặt tên cụ thể cho file kết quả (ví dụ: ten_chuong_trinh), bạn hãy sử dụng cờ -o:

    g++ cplus.cpp -o ten_chuong_trinh

    Sau đó, bạn chạy chương trình bằng tên mới này:

    ./ten_chuong_trinh
    Kết quả sau khi chạy chương trình bằng tên mới
    Kết quả sau khi chạy chương trình bằng tên mới

    Những lưu ý khi biên dịch C++ trên Linux

    Khi biên dịch C++ trên Linux, bạn cần nắm rõ những lưu ý kỹ thuật đảm bảo quá trình này diễn ra chính xác:

    • Lựa chọn chuẩn C++ phù hợp: Trình biên dịch G++ mặc định có thể sử dụng chuẩn cũ nên cần chỉ định rõ chuẩn bạn muốn sử dụng để đảm bảo tương thích cú pháp.
    • Quản lý liên kết thư viện: Nếu chương trình sử dụng thư viện bên ngoài, bạn bắt buộc phải chỉ định đường dẫn header (-I) và đường dẫn thư viện liên kết (-L, -l).
    • Kích hoạt cảnh báo và gỡ lỗi: Luôn biên dịch với cờ -Wall-Wextra để trình biên dịch báo cáo mọi cảnh báo tiềm ẩn trong code. Nếu cần debug bằng GDB, bạn hãy thêm cờ -g để tích hợp thông tin gỡ lỗi vào file thực thi.
    • Sử dụng hệ thống Build tự động: Với các dự án lớn gồm nhiều file .cpp, việc gõ lệnh G++ thủ công rất dễ sai sót, vì vậy bạn nên sử dụng Makefile hoặc CMake để tự động hóa quy trình biên dịch và quản lý sự phụ thuộc giữa các file.
    • Cấp độ tối ưu hóa: Khi biên dịch bản Release, bạn hãy sử dụng cờ -O2 hoặc -O3 để tối ưu hóa tốc độ và hiệu năng chương trình. Ngược lại, khi đang phát triển, bạn nên dùng -O0 để biên dịch nhanh hơn và dễ sửa lỗi hơn.
    • Quyền thực thi: Sau khi biên dịch, file kết quả đôi khi cần được cấp quyền thực thi bằng lệnh chmod +x ten_chuong_trinh trước khi chạy.
    Bạn cần lựa chọn chuẩn C++ phù hợp
    Bạn cần lựa chọn chuẩn C++ phù hợp (Nguồn: Internet)

    Câu hỏi thường gặp

    Sự khác nhau giữa G++ và GCC là gì khi biên dịch C++ trên Linux?

    Mặc dù cả hai đều thuộc bộ trình biên dịch GNU, nhưng có sự khác biệt quan trọng về liên kết:
    GCC: Có thể biên dịch file .cpp, nhưng biên dịch xong sẽ không tự động liên kết với thư viện chuẩn C++. Bạn sẽ gặp lỗi “undefined reference” nếu không thêm cờ thủ công.
    G++: Là lệnh chuyên dụng cho C++, tự động gọi gcc để biên dịch và liên kết với các thư viện chuẩn C++ cần thiết.

    Nên chọn chuẩn C++ nào khi biên dịch trên Linux?

    Lựa chọn phụ thuộc vào môi trường triển khai của bạn:
    C++14: Lựa chọn phù hợp nếu bạn làm việc trên các hệ thống Linux cũ hoặc trình biên dịch cũ.
    C++17 (Khuyên dùng): Đây là chuẩn phổ biến nhất hiện nay, mang lại sự cân bằng giữa các tính năng hiện đại và độ ổn định, được hỗ trợ tốt bởi hầu hết các distro Linux hiện hành.
    C++20: Chỉ nên chọn nếu dự án cần các tính năng mới nhất và bạn đảm bảo server/máy trạm đều đã cài đặt trình biên dịch GCC/Clang phiên bản rất mới.

    Khi nào nên dùng Clang thay vì G++ trên Linux?

    Bạn nên cân nhắc sử dụng Clang trong 3 trường hợp sau:
    Cần thông báo lỗi dễ hiểu: Clang hiển thị thông báo lỗi rõ ràng, trực quan và đưa ra gợi ý sửa lỗi chính xác hơn g++ nên sẽ phù hợp cho quá trình phát triển (Dev).
    Tốc độ biên dịch: Trong nhiều trường hợp, Clang biên dịch code nhanh hơn g++, giúp tiết kiệm thời gian build dự án lớn.
    – Phân tích code tĩnh: Clang có hệ sinh thái công cụ hỗ trợ mạnh mẽ hơn để kiểm tra chất lượng code và định dạng code tự động.

    Việc biên dịch C++ trên Linux bằng G++ là một kỹ năng nền tảng quan trọng với quy trình đơn giản và nhanh chóng, giúp lập trình viên hiểu rõ hơn về cơ chế hoạt động của trình biên dịch trên hệ điều hành mã nguồn mở. Mời bạn tham khảo thêm các bài viết thuộc chủ đề Linux ngay bên dưới đây:

    5/5 - (1 bình chọn)
    Nguyễn Hưng
    Tôi là Nguyễn Hưng hay còn được biết đến với nickname là Bo, chuyên gia về hệ thống, mạng và bảo mật. Tôi là Co-Founder của Vietnix và Co-Founder của dự án Chống Lừa Đảo.
    0 0 đánh giá
    Đánh giá bài viết
    Theo dõi
    Thông báo của
    guest
    0 Góp ý
    Cũ nhất
    Mới nhất Được bỏ phiếu nhiều nhất
    Phản hồi nội tuyến
    Xem tất cả bình luận

    BÀI VIẾT LIÊN QUAN

    Hướng dẫn thiết lập SSH Passwordless Login trên Linux chi tiết
    Hướng dẫn thiết lập SSH Passwordless Login trên Linux chi tiết

    SSH Passwordless Login là cơ chế đăng nhập SSH không cần nhập mật khẩu, thay vào đó dùng cặp khóa mã hóa để xác thực người dùng với máy chủ từ xa. Trong bài viết này, mình sẽ hướng dẫn bạn các thiết lập SSH Passwordless Login chi tiết từng bước trên Linux. Những điểm…

    11/03/2026

    Cách dùng lệnh networkct để kiểm tra và quản lý trạng thái các liên kết mạng
    Cách dùng lệnh networkct để kiểm tra và quản lý trạng thái các liên kết mạng

    networkctl là công cụ dòng lệnh dùng để giám sát trạng thái các thiết bị mạng được quản lý bởi systemd-networkd. Lệnh này cho phép xem chi tiết cấu hình và liên kết, hỗ trợ quản trị viên chẩn đoán, xử lý sự cố mạng nhanh chóng. Trong bài viết dưới đây, mình sẽ hướng…

    11/03/2026

    Hướng dẫn sửa lỗi command pip3 not found chi tiết và nhanh chóng
    Hướng dẫn sửa lỗi command pip3 not found chi tiết và nhanh chóng

    Lỗi command pip3 not found nghĩa là hệ điều hành không tìm thấy lệnh pip3 trong PATH, thường do pip3 chưa được cài hoặc cài rồi nhưng không được thêm vào biến môi trường PATH. Trong bài viết này, mình sẽ cùng bạn tìm hiểu về nguyên nhân và cách khắc phục lỗi command pip3…

    11/03/2026

    Hướng dẫn sử dụng Nano Editor: Từ cài đặt đến chỉnh sửa cho người mới bắt đầu
    Hướng dẫn sử dụng Nano Editor: Từ cài đặt đến chỉnh sửa cho người mới bắt đầu

    Nano Editor (GNU nano) là một trình soạn thảo văn bản chạy trong terminal có giao diện đơn giản và dễ sử dụng trên các hệ điều hành Linux/UNIX. Công cụ này thường được cài sẵn trên nhiều bản phân phối Linux và phù hợp cho người mới, để mở, chỉnh sửa và lưu các…

    11/03/2026

    linux

    system-linux

    text