可以的。Ubuntu 下使用 Go 语言完全支持交叉编译(交叉打包),而且 Go 原生就支持,不需要额外安装交叉编译工具链。
Go 通过两个环境变量控制目标平台:
GOOS:目标操作系统(如 linux、windows、darwin)GOARCH:目标架构(如 amd64、arm64、386)只要设置好这两个变量,再执行 go build 即可。
GOOS=windows GOARCH=amd64 go build -o app.exe main.go
GOOS=darwin GOARCH=amd64 go build -o app-mac main.go
GOOS=darwin GOARCH=arm64 go build -o app-mac-arm main.go
GOOS=linux GOARCH=arm64 go build -o app-arm64 main.go
go tool dist list
常见输出示例:
linux/amd64
linux/arm64
windows/amd64
darwin/arm64
如果代码里用了 CGO(比如 sqlite、某些加密库):
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
✅ 交叉编译推荐关闭 CGO
否则你需要:
int 长度filepath.Join#!/bin/bash
for os in linux windows darwin; do
for arch in amd64 arm64; do
GOOS=$os GOARCH=$arch CGO_ENABLED=0 go build -o build/app-$os-$arch
done
done
✅ Ubuntu + Golang
✅ 原生支持交叉编译
✅ 不需要交叉工具链(纯 Go)
✅ 实战中建议 CGO_ENABLED=0
如果你是:
我也可以给你具体方案。