在 Linux 下使用 **Go(Golang)进行交叉编译(cross compile)**是非常简单的,因为 Go 原生支持交叉编译,不需要额外安装目标平台的编译器(除非用到 cgo)。
下面按常见场景说明。
交叉编译主要依赖两个环境变量:
GOOS # 目标操作系统
GOARCH # 目标 CPU 架构
GOOS=windows GOARCH=amd64 go build -o app.exe main.go
GOOS=darwin GOARCH=amd64 go build -o app_darwin main.go
GOOS=darwin GOARCH=arm64 go build -o app_darwin_arm64 main.go
GOOS=linux GOARCH=arm GOARM=7 go build -o app_arm main.go
go tool dist list
示例输出:
linux/amd64
linux/arm64
windows/386
windows/amd64
darwin/arm64
BINARY=app
build-linux:
GOOS=linux GOARCH=amd64 go build -o $(BINARY)_linux
build-windows:
GOOS=windows GOARCH=amd64 go build -o $(BINARY).exe
build-mac:
GOOS=darwin GOARCH=arm64 go build -o $(BINARY)_mac
all:
make build-linux build-windows build-mac
使用:
make all
如果你的项目 使用了 CGO(例如 SQLite、某些加密库),需要目标平台的 C 编译器。
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
✅ 推荐方式(大多数场景可用)
例如在 Linux 编译 Windows 程序:
CGO_ENABLED=1 \
GOOS=windows GOARCH=amd64 \
CC=x86_64-w64-mingw32-gcc \
go build
需要安装:
sudo apt install gcc-mingw-w64
| GOARCH | GOARM | 示例 |
|---|---|---|
| arm | 7 | 树莓派 3/4 |
| arm64 | - | 树莓派 4(64位) |
示例:
GOOS=linux GOARCH=arm64 go build
file 命令检查)file app
// +build windows
或
//go:build windows
Linux 下 Go 交叉编译一句话:
GOOS=目标系统 GOARCH=目标架构 go build
如果你有具体目标(比如:树莓派 / Windows / macOS / ARM),我可以给你精确命令。