在 macOS 上编译 Go 程序并生成 Linux x86_64 (amd64) 平台的可执行文件,可以通过 Go 内置的交叉编译功能实现。以下是具体步骤和命令:
1. 基础编译命令
直接通过环境变量指定目标平台:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o myapp-linux-x64
CGO_ENABLED=0
: 禁用 CGO,强制使用纯 Go 代码编译(避免依赖系统 C 库,提高可移植性)。GOOS=linux
: 指定目标操作系统为 Linux。GOARCH=amd64
: 指定目标架构为 x86_64(64 位)。-o myapp-linux-x64
: 输出文件名(可自定义)。
2. 需要 CGO 的情况
如果程序依赖 C 库(如使用了 SQLite、图像处理等需要 C 绑定的库),需启用 CGO 并配置交叉编译工具链:
# 安装 Linux x64 的 C 交叉编译工具链(仅需一次)
brew install FiloSottile/musl-cross/musl-cross
# 编译命令(启用 CGO,使用 musl 工具链)
CC=x86_64-linux-musl-gcc CXX=x86_64-linux-musl-g++ \
CGO_ENABLED=1 GOOS=linux GOARCH=amd64 \
go build -ldflags="-linkmode external -extldflags=-static" -o myapp-linux-x64
musl-cross
: 提供 Linux 兼容的 C 库编译工具。-linkmode external -extldflags=-static
: 强制静态链接 C 库,避免依赖目标系统的动态库。
通过上述步骤,你可以轻松在 macOS 上为 Linux x64 平台编译 Go 程序,无论是纯 Go 项目还是依赖 C 库的复杂应用。