交叉编译
概念说明
交叉编译是指在当前系统上编译另一个系统或架构可运行的程序。
Go 通过 GOOS 和 GOARCH 控制目标系统与目标 CPU 架构。
例如在 Windows 上编译 Linux 服务器可运行的二进制文件。
常见目标是 linux/amd64、linux/arm64、windows/amd64、darwin/arm64。
语法/规则
GOOS表示目标操作系统,例如linux、windows、darwin。GOARCH表示目标 CPU 架构,例如amd64、arm64。- Windows 目标文件通常加
.exe后缀。 - 交叉编译前要确认项目是否依赖 CGO。
- 设置环境变量只影响当前终端会话时更安全。
PowerShell 交叉编译 Linux 示例
| |
PowerShell 交叉编译 Windows 示例
| |
bash 交叉编译示例
| |
输出结果:
| |
常见错误
- 目标系统是 Windows,却忘记给输出文件加
.exe。 - 项目依赖 CGO 或系统动态库,普通交叉编译无法直接通过。
- 编译成 Linux 程序后拿到 Windows 上运行,系统不匹配会失败。
- 在同一个终端里多次切换目标平台后忘记检查当前
GOOS和GOARCH。