温馨提示×

ubuntu golang交叉编译如何做

小樊
34
2026-10-04 09:59:42
栏目: 编程语言

在 Ubuntu 上使用 Golang 进行交叉编译(为其他平台生成可执行文件)非常简单,核心就是设置两个环境变量:

  • GOOS:目标操作系统
  • GOARCH:目标架构

一、基本交叉编译命令

示例:编译 Linux ARM64 程序

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

示例:编译 Windows 64 位程序

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

示例:编译 macOS(Intel)

GOOS=darwin GOARCH=amd64 go build -o app-mac

示例:编译 macOS(Apple Silicon)

GOOS=darwin GOARCH=arm64 go build -o app-mac-arm

二、常见 GOOS / GOARCH 组合

平台 GOOS GOARCH
Linux x86_64 linux amd64
Linux ARM linux arm
Linux ARM64 linux arm64
Windows 32 windows 386
Windows 64 windows amd64
macOS Intel darwin amd64
macOS M1/M2 darwin arm64

查看支持列表:

go tool dist list

三、Ubuntu 上交叉编译注意事项

1️⃣ CGO 问题(非常重要)

如果项目使用了 CGO(如 sqlite、某些加密库):

CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build

✅ 推荐交叉编译时关闭 CGO

如果必须启用 CGO,需要安装对应平台的 C 交叉编译器,例如:

sudo apt install gcc-aarch64-linux-gnu

然后:

CGO_ENABLED=1 CC=aarch64-linux-gnu-gcc \
GOOS=linux GOARCH=arm64 go build

四、一次性编译多个平台(脚本示例)

#!/bin/bash

platforms=(
  "linux/amd64"
  "linux/arm64"
  "windows/amd64"
  "darwin/amd64"
  "darwin/arm64"
)

for p in "${platforms[@]}"; do
  GOOS=${p%/*}
  GOARCH=${p#*/}
  echo "Building $GOOS/$GOARCH"
  GOOS=$GOOS GOARCH=$GOARCH go build -o app-$GOOS-$GOARCH
done

五、使用 xgo(适合复杂项目)

go install github.com/crazy-max/xgo@latest
xgo --targets=linux/amd64,windows/amd64,darwin/arm64 .

六、总结

✅ Ubuntu 交叉编译 Golang:

  • 设置 GOOS + GOARCH
  • 尽量 CGO_ENABLED=0
  • 不需要额外安装 Go 工具链

如果你有 具体目标平台(如树莓派、龙芯、Windows XP),可以告诉我,我可以给你精确命令。

0 踩