Cách khắc phục lỗi 'cgo: C compiler "gcc" not found' trong Go

beginner🔷 Go2026-07-22| Windows, Linux, macOS; Go 1.x; Các dự án sử dụng CGO (ví dụ: go-sqlite3, confluent-kafka-go)

Error Message

cgo: C compiler "gcc" not found: exec: "gcc": executable file not found in %PATH%
#go#cgo#gcc#build-error#windows

LỗiCó lẽ bạn đã gặp phải lỗi này khi chạy go build hoặc go run trong một dự án có sử dụng các phụ thuộc dựa trên C. Thông báo lỗi rất rõ ràng:

cgo: C compiler "gcc" not found: exec: "gcc": executable file not found in %PATH%

Tại sao lỗi này xảy raGo thường biên dịch thành một tệp thực thi tĩnh (static binary) duy nhất mà không cần các công cụ bên ngoài. Tuy nhiên, nhiều thư viện phổ biến—như SQLite driver (go-sqlite3) hoặc Kafka clients—dựa vào CGO. Cầu nối này cho phép Go giao tiếp với mã nguồn C hiện có.

Nếu không có trình biên dịch C như GCC, Go không thể xử lý các tệp cấp thấp này. Nếu gcc không nằm trong biến môi trường PATH của hệ thống, bộ công cụ build sẽ dừng lại. Bạn cần một trình biên dịch hoạt động để kết nối giữa Go và C.

Cách khắc phục trên WindowsWindows không đi kèm với trình biên dịch C, đó là lý do tại sao lỗi này ảnh hưởng nặng nề nhất đến người dùng Windows. Bạn có ba cách đáng tin cậy để cài đặt và chạy GCC.

Cách 1: Chocolatey (Cách nhanh nhất)Nếu bạn đã sử dụng Chocolatey, bạn có thể bỏ qua việc tải xuống thủ công. Hãy mở PowerShell với quyền Admin và chạy lệnh sau:

choco install mingw

Lệnh này sẽ cài đặt bản phân phối MinGW-w64. Sau khi hoàn tất (thường mất 2–3 phút), hãy khởi động lại terminal để cập nhật các biến môi trường.

Cách 2: MSYS2 (Tốt nhất cho sự ổn định lâu dài)MSYS2 là một môi trường mạnh mẽ cung cấp các bản build GCC hiện đại. Đây là lựa chọn ưu tiên của nhiều người đóng góp cho Go.

  • Tải xuống bộ cài đặt từ msys2.org.- Mở terminal MSYS2 UCRT64.- Chạy lệnh sau để tải bộ công cụ đầy đủ:``` pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain

Cuối cùng, hãy thêm `C:\msys64\ucrt64\bin` vào biến PATH của hệ thống Windows. Điều này đảm bảo Go có thể tìm thấy `gcc.exe` bất cứ khi nào bạn build dự án.
### Cách 3: Cài đặt thủ công- Tải xuống các tệp MinGW-w64 từ GitHub hoặc SourceForge.- Giải nén chúng vào một thư mục như `C:\mingw64`.- Mở menu Start và tìm kiếm "Edit the system environment variables" (Chỉnh sửa biến môi trường hệ thống).- Trong mục **System Variables**, tìm **Path** và nhấn **Edit**.- Thêm `C:\mingw64\bin` vào danh sách và lưu các thay đổi của bạn.## Cách khắc phục trên LinuxCác bản phân phối Linux giúp việc này trở nên dễ dàng. Bạn chỉ cần cài đặt các gói phát triển tiêu chuẩn, thường chiếm khoảng 100MB dung lượng đĩa.
### Ubuntu / Debian / Mint```
sudo apt update && sudo apt install build-essential

CentOS / RHEL / Fedora```

sudo dnf groupinstall "Development Tools"


### Arch Linux```
sudo pacman -S base-devel

Cách khắc phục trên macOSApple cung cấp một gói rút gọn gọi là Command Line Tools. Bạn không cần bộ Xcode IDE khổng lồ 12GB; một bản tải xuống nhỏ khoảng 500MB là đủ.

xcode-select --install

Nhấn "Install" trên cửa sổ thông báo cập nhật phần mềm. Sau khi hoàn tất, gcc (thực chất là một shortcut dẫn đến trình biên dịch Clang trên Mac) sẽ sẵn sàng để sử dụng.

Giải pháp thay thế "Tôi không cần CGO"Sometimes you don't actually need a C compiler. If your project doesn't strictly require C features, you can tell Go to skip CGO entirely. This creates a more portable binary and bypasses the GCC requirement.

Hãy thử build với cờ CGO_ENABLED được đặt bằng 0:

# Windows (PowerShell)
$env:CGO_ENABLED="0"; go build

# Linux / macOS
CGO_ENABLED=0 go build

Lưu ý quan trọng: Nếu bạn đang sử dụng github.com/mattn/go-sqlite3, cách này sẽ thất bại. Thư viện cụ thể đó yêu cầu CGO. Nếu bạn muốn hoàn toàn không dùng C, hãy chuyển sang một giải pháp thay thế thuần Go như modernc.org/sqlite.

Kiểm tra: Đã khắc phục được chưa?Mở một cửa sổ terminal mới. Chạy lệnh này để kiểm tra phiên bản trình biên dịch của bạn:

gcc --version

Bạn sẽ thấy kết quả dạng như gcc (MinGW-W64) 13.2.0. Bây giờ, hãy xác minh rằng Go đã nhận ra thay đổi:

go env CGO_ENABLED
go build ./...

Nếu go env trả về 1 và quá trình build hoàn tất không có lỗi, bạn đã cấu hình môi trường thành công.

Mẹo chuyên nghiệp cho tương lai- Dockerize: Sử dụng image golang:1.22-bookworm cho CI/CD. Nó đi kèm với build-essential được cài đặt sẵn, giúp bạn tránh khỏi những rắc rối khi thiết lập.- Kiểm tra các Import: Trước khi thêm một phụ thuộc, hãy kiểm tra xem có phiên bản "Pure Go" (Go thuần túy) hay không. Các thư viện Pure Go biên dịch nhanh hơn và dễ dàng biên dịch chéo (cross-compile) hơn.- GitHub Actions: Nếu các bản build của bạn thất bại trên cloud, hãy đảm bảo workflow của bạn sử dụng ubuntu-latest, vì nó bao gồm GCC theo mặc định.

Related Error Notes