Go语言怎么编译Linux程序_Go语言编译Linux可执行文件教程【避坑】

张开发
2026/4/17 0:21:08 15 分钟阅读

分享文章

Go语言怎么编译Linux程序_Go语言编译Linux可执行文件教程【避坑】
在 macOS 或 Windows 上编译 Linux 可执行文件需显式设置 GOOSlinux 和 GOARCH若启用 cgo 则需配置交叉编译工具链或禁用 cgo推荐使用 Docker 构建以规避环境差异。Go 编译 Linux 可执行文件直接设 GOOS 和 GOARCHGo 默认按当前系统编译想在 macOS 或 Windows 上生成 Linux 程序不能只靠 go build必须显式指定目标平台。不设 GOOSlinux编译出来的是你本地系统的二进制扔到 Linux 上直接报 cannot execute binary file: Exec format error。实操建议立即学习“go语言免费学习笔记深入”在终端里先临时设置环境变量GOOSlinux GOARCHamd64 go build -o myapp main.go交叉编译 ARM64 Linux比如跑在树莓派或云服务器上用 GOARCHarm64不是 arm 或 aarch64如果项目用了 cgo比如调了 SQLite、OpenSSL默认会失败——Linux 的 C 标准库头文件和链接器在 macOS/Windows 上不存在cgo 开启时编译 Linux 程序得配好交叉编译工具链只要代码里有 #import C 或依赖含 cgo 的包如 database/sql 配 _ github.com/mattn/go-sqlite3GOOSlinux 就不够用了。这时候 Go 会尝试调用 gcc但宿主机的 gcc 不认识 sys/stat.h 这类 Linux 头文件。实操建议立即学习“go语言免费学习笔记深入”禁用 cgo 是最简方案CGO_ENABLED0 GOOSlinux GOARCHamd64 go build -o myapp main.go启用 cgo 时macOS 上需装 x86_64-linux-gnu-gcc用 Homebrewbrew install x86_64-linux-gnu-binutils x86_64-linux-gnu-gcc再设 CC_x86_64_linux_gnux86_64-linux-gnu-gccWindows 用户基本别硬刚 cgo 交叉编译Docker 更稳docker run --rm -v $(pwd):/src -w /src golang:1.22-alpine go build -o myapp main.goLinux 上运行失败检查 libc 版本和静态链接即使成功编译出 Linux 二进制放到旧版 CentOS 7 或 Alpine 容器里可能报 version GLIBC_2.34 not found。这是因为 Go 默认动态链接宿主机的 libc如果你在 Ubuntu 22.04 编译它用的是较新 glibc。 Mokker AI AI产品图添加背景

更多文章