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++vàgcc, nên chọn chuẩn C++ nào và khi nào nên dùngClangthay 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.

Cách 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.cppKết quả đầu ra như sau:

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
Lư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.cppKết quả sẽ hiển thị như sau:

Giải thích:
- Lệnh này sẽ đọc file
cplus.cppvà 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.outtrong 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.outLúc này, kết quả sẽ hiển thị trên màn hình console như sau:

Đặ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_trinhSau đó, bạn chạy chương trình bằng tên mới này:
./ten_chuong_trinh
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ờ
-Wallvà-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ờ
-O2hoặ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_trinhtrước khi chạy.

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:




