本质是beego依赖的底层组件(如go-sqlite3)启用了cgo,必须调用本地c编译器;若未安装gcc或path未配置,就会报“exec: 'gcc': executable file not found in $path”。

Beego 安装时提示缺少 gcc,本质不是 Beego 本身的问题,而是它依赖的底层组件(如 go-sqlite3、prometheus/procfs 等)启用了 cgo,必须调用本地 C 编译器。不装 gcc 或路径没配对,go get 或 bee run 就会直接报 exec: "gcc": executable file not found in $PATH。
确认是否真缺 gcc 而非只是路径问题
先别急着重装,运行两行命令快速定位:
-
gcc --version—— 如果输出版本号,说明已装,只是没进$PATH -
which gcc—— 如果无输出,说明确实没装,或装了但不在标准路径(比如 Windows 上装了 TDM-GCC 却没勾选“add to PATH”) -
go env CGO_ENABLED—— 若返回0,说明cgo已被禁用,此时不会触发gcc调用;若为1(默认),则必须有gcc
Linux/macOS:用包管理器装完整开发工具链
不要单独装 gcc,否则大概率后续报 gmp.h: No such file or directory 这类头文件缺失错误。直接装发行版打包好的开发组:
- RHEL/CentOS/AlmaLinux/Rocky(dnf):
dnf groupinstall "Development Tools" - Debian/Ubuntu:
apt install build-essential(自动包含gcc、g++、make、dpkg-dev) - macOS(需先装 Xcode Command Line Tools):
xcode-select --install
装完再验证:gcc --version && pkg-config --version && make --version 全部有输出才算到位。
Windows:TDM-GCC 是最省心的选择
MinGW-w64 或 MSYS2 也能用,但 TDM-GCC 针对 Go + cgo 场景做了优化,安装时勾选 “Add to PATH” 即可,不用手动配环境变量。装完后重启终端,运行:
-
gcc --version(应显示类似13.2.0的版本) -
go env CC(默认就是gcc,无需改) - 如果仍报错,检查
CGO_ENABLED是否被意外设为0:go env -w CGO_ENABLED=1
Beego v2 项目里还卡在 sqlite 驱动上?
即使 gcc 装好了,go-sqlite3 仍可能因系统级依赖缺失而编译失败。常见现象是:
-
fatal error: sqlite3.h: No such file or directory→ 缺 SQLite 头文件,Debian/Ubuntu 装libsqlite3-dev,RHEL 系装sqlite-devel -
undefined reference to 'dlopen'→ 缺libdl,通常随build-essential或Development Tools一起装好,没装就补libdl-dev或glibc-devel - 用
bee run启动时报错,但go run main.go没问题 → 检查bee是否从旧 GOPATH 安装,建议统一用go install github.com/beego/bee/v2@latest重装
真正容易被忽略的是:cgo 编译失败往往不是第一层报错,而是后续链接阶段才暴露,所以别只盯着 gcc not found,要顺着完整错误日志往回找第一个 #include 或 ld 相关线索。











