温馨提示×

golang在ubuntu怎么交叉编译

小樊
34
2026-10-24 23:09:19
栏目: 编程语言

在 Ubuntu 上用 Golang 进行交叉编译 非常简单,因为 Go 原生支持交叉编译,不需要额外工具链(除了某些特殊情况,比如 cgo)。


一、基本交叉编译方式(不使用 cgo)

1️⃣ 查看支持的平台

go tool dist list

会列出类似:

linux/amd64
linux/arm64
windows/amd64
darwin/arm64

2️⃣ 交叉编译示例

✅ 编译 Windows 程序(64 位)

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

✅ 编译 macOS(Apple Silicon)

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

✅ 编译 Linux ARM64(如树莓派)

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

二、常用 GOOS / GOARCH 对照

系统 GOOS GOARCH
Linux x86_64 linux amd64
Linux ARM linux arm
Linux ARM64 linux arm64
Windows windows amd64
macOS Intel darwin amd64
macOS M1/M2 darwin arm64

三、启用 CGO 时的交叉编译(⚠️重点)

如果代码里用了 C 或 sqlite 等需要 CGO:

CGO_ENABLED=1 \
GOOS=linux GOARCH=arm64 \
CC=aarch64-linux-gnu-gcc \
go build -o app_arm64 main.go

Ubuntu 安装交叉编译工具链

# ARM64
sudo apt install gcc-aarch64-linux-gnu

# ARM
sudo apt install gcc-arm-linux-gnueabihf

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

#!/bin/bash
for os in linux windows darwin; do
  for arch in amd64 arm64; do
    GOOS=$os GOARCH=$arch go build -o build/app_${os}_${arch} main.go
  done
done

五、常见问题

❓ 编译报错 exec: "gcc": executable file not found

→ 关闭 CGO:

CGO_ENABLED=0 go build

❓ 编译出来不能在目标机运行

→ 确认:

  • GOARCH 是否正确
  • 是否启用了 CGO 但未使用对应交叉编译器

如果你有 具体目标平台(如树莓派 / Windows / 嵌入式),我可以给你更精确的命令。

0 踩