温馨提示×

linux怎么配置golang交叉编译

小樊
56
2026-10-18 20:15:18
栏目: 编程语言

在 Linux 上配置 Golang 交叉编译(Cross Compilation) 其实非常简单,因为 Go 原生支持交叉编译,不需要额外安装交叉工具链(除非用到 CGO)。

下面按 常见需求 给你一个完整说明。


一、Go 交叉编译基本原理

Go 通过两个环境变量控制目标平台:

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

常用组合示例:

平台 GOOS GOARCH
Linux amd64 linux amd64
Linux arm64 linux arm64
Windows 64位 windows amd64
macOS Intel darwin amd64
macOS M1/M2 darwin arm64

二、最基础的交叉编译(不使用 CGO)

1️⃣ 编译 Linux → Windows

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

2️⃣ 编译 Linux → macOS

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

3️⃣ 编译 Linux → Linux ARM

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

✅ 不需要安装任何交叉编译器


三、查看支持的平台

go tool dist list

示例输出:

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

四、启用 CGO 的交叉编译(重点)

如果你的项目 用到了 CGO(如 sqlite、opencv),情况不同。

❌ 默认不行

CGO_ENABLED=1 GOOS=windows go build
# 会报错

✅ 需要交叉 C 编译器

以 Linux → Windows 为例

sudo apt install gcc-mingw-w64

然后:

CGO_ENABLED=1 \
GOOS=windows \
GOARCH=amd64 \
CC=x86_64-w64-mingw32-gcc \
go build -o app.exe main.go

Linux → ARM64

sudo apt install gcc-aarch64-linux-gnu

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

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

#!/bin/bash

for target in \
  "linux amd64" \
  "linux arm64" \
  "windows amd64" \
  "darwin arm64"
do
  os=$(echo $target | awk '{print $1}')
  arch=$(echo $target | awk '{print $2}')
  echo "Building $os/$arch"
  GOOS=$os GOARCH=$arch go build -o bin/app_${os}_${arch} main.go
done

六、常见坑

1️⃣ 文件路径分隔符

  • Windows 用 \
  • 跨平台代码注意 filepath.Join

2️⃣ 系统调用差异

  • 不要直接调用 Linux 特有 API

3️⃣ 静态编译(推荐)

go build -ldflags "-s -w" -o app main.go

七、总结

✅ 纯 Go 项目

  • 直接设置 GOOS / GOARCH

⚠️ CGO 项目

  • 安装对应交叉 GCC
  • 设置 CC

如果你告诉我:

  • 目标平台
  • 是否使用 CGO
  • Go 版本

我可以给你 精确的一条命令。

0 踩