章节

18.2 交叉编译

本篇学习 GOOS 和 GOARCH 的交叉编译配置,并能在本机编译其他平台的可执行文件。

交叉编译

概念说明

交叉编译是指在当前系统上编译另一个系统或架构可运行的程序。
Go 通过 GOOSGOARCH 控制目标系统与目标 CPU 架构。

例如在 Windows 上编译 Linux 服务器可运行的二进制文件。
常见目标是 linux/amd64linux/arm64windows/amd64darwin/arm64

语法/规则

  1. GOOS 表示目标操作系统,例如 linuxwindowsdarwin
  2. GOARCH 表示目标 CPU 架构,例如 amd64arm64
  3. Windows 目标文件通常加 .exe 后缀。
  4. 交叉编译前要确认项目是否依赖 CGO。
  5. 设置环境变量只影响当前终端会话时更安全。

PowerShell 交叉编译 Linux 示例

1
2
3
$env:GOOS = "linux"
$env:GOARCH = "amd64"
go build -o app-linux .

PowerShell 交叉编译 Windows 示例

1
2
3
$env:GOOS = "windows"
$env:GOARCH = "amd64"
go build -o app.exe .

bash 交叉编译示例

1
GOOS=linux GOARCH=amd64 go build -o app-linux .

输出结果:

1
无错误输出时表示命令执行成功

常见错误

  1. 目标系统是 Windows,却忘记给输出文件加 .exe
  2. 项目依赖 CGO 或系统动态库,普通交叉编译无法直接通过。
  3. 编译成 Linux 程序后拿到 Windows 上运行,系统不匹配会失败。
  4. 在同一个终端里多次切换目标平台后忘记检查当前 GOOSGOARCH
本文禁止转载
使用 Hugo 构建
主题 StackJimmy 设计 由 Hobin 魔改
最近构建时间:2026-04-17 19:07:48 CST
载入天数...载入时分秒...
发表了 1 篇文章 · 发表了 152 篇笔记 · 总计 18 万 0 千字