在 Ubuntu 上使用 Golang 进行交叉编译(交叉打包),核心就是设置 GOOS 和 GOARCH 环境变量。下面按常见场景说明。
Go 原生支持交叉编译,不需要额外工具链:
GOOS=目标系统 GOARCH=目标架构 go build
常见组合:
| 目标系统 | GOOS | GOARCH |
|---|---|---|
| Windows | windows | amd64 |
| Windows | windows | 386 |
| macOS | darwin | amd64 |
| macOS (M1) | darwin | arm64 |
| Linux | linux | amd64 |
| Linux | linux | arm |
| Linux | linux | arm64 |
GOOS=windows GOARCH=amd64 go build -o app.exe main.go
GOOS=darwin GOARCH=amd64 go build -o app-darwin main.go
GOOS=darwin GOARCH=arm64 go build -o app-darwin-arm64 main.go
GOOS=linux GOARCH=arm64 go build -o app-arm64 main.go
GOOS=linux GOARCH=arm go build -o app-arm main.go
build:
GOOS=windows GOARCH=amd64 go build -o bin/app.exe
GOOS=linux GOARCH=amd64 go build -o bin/app-linux
GOOS=darwin GOARCH=arm64 go build -o bin/app-mac
使用:
make build
如果你的项目 使用了 CGO(如 sqlite、某些加密库):
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
✅ 推荐交叉编译时 禁用 CGO
否则需要:
gcc-arm-linux-gnueabihf)go tool dist list
示例输出:
linux/amd64
linux/arm64
windows/amd64
darwin/arm64
for os in linux windows darwin; do
for arch in amd64 arm64; do
GOOS=$os GOARCH=$arch go build -o bin/app-$os-$arch
done
done
如果你有 具体目标平台(如树莓派、Android、MIPS)或 需要打包成 deb / docker,可以告诉我,我给你更具体的方案。