在 Linux 上用 Golang 做交叉编译其实很简单,Go 原生就支持交叉编译,不需要额外安装目标平台工具链(除了 CGO 相关情况)。
Go 通过两个环境变量控制目标平台:
GOOS:目标操作系统GOARCH:目标 CPU 架构GOOS=linux GOARCH=amd64 go build
GOOS=windows GOARCH=amd64 go build -o app.exe
GOOS=darwin GOARCH=arm64 go build -o app_mac
(M1/M2 用 arm64,Intel Mac 用 amd64)
GOOS=linux GOARCH=arm64 go build -o app_arm64
go tool dist list
示例输出:
linux/amd64
linux/arm64
windows/amd64
darwin/arm64
完全没问题,直接交叉编译。
需要目标平台 C 编译器:
CGO_ENABLED=1 \
GOOS=windows GOARCH=amd64 \
CC=x86_64-w64-mingw32-gcc \
go build
Linux 上常见交叉编译器:
mingw-w64gcc-aarch64-linux-gnu一般建议:
CGO_ENABLED=0 go build
(如果代码允许)
#!/bin/bash
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
/ vs \)如果你有具体目标平台(比如“Linux 编 Windows 64 位”或“x86 编 ARM”)或者用了 sqlite / ffmpeg,可以告诉我,我给你精确命令。