温馨提示×

ubuntu golang如何交叉打包

小樊
39
2026-09-28 12:29:59
栏目: 编程语言

在 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

二、Ubuntu 下常见交叉编译示例

1️⃣ 编译 Windows 64 位程序

GOOS=windows GOARCH=amd64 go build -o app.exe main.go

2️⃣ 编译 macOS (Intel)

GOOS=darwin GOARCH=amd64 go build -o app-darwin main.go

3️⃣ 编译 macOS (Apple Silicon)

GOOS=darwin GOARCH=arm64 go build -o app-darwin-arm64 main.go

4️⃣ 编译 Linux ARM64(如树莓派、服务器)

GOOS=linux GOARCH=arm64 go build -o app-arm64 main.go

5️⃣ 编译 Linux ARM (32位)

GOOS=linux GOARCH=arm go build -o app-arm main.go

三、使用 Makefile 统一打包(推荐)

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 情况(重要)

如果你的项目 使用了 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,可以告诉我,我给你更具体的方案。

0 踩