Skip to content

Go 语言交叉编译

Go 语言支持跨平台编译,也就是交叉编译,例如在 Windows 电脑上编译出 Linux 可执行的打包文件。

环境变量

Go 语言交叉编译时,最重要的是需要知道目标平台是什么操作系统,以及是什么体系架构,因为不同的操作系统和体系架构,内部实现不一样,指令集不一样,编译出来的二进制也不一样。

操作系统和体系架构环境变量说明如下:

名称环境变量可选值
操作系统GOOSdarwin、freebsd、linux 和 windows
体系架构GOARCH386、amd64 和 arm

使用示例

1、Windows 下编译 Mac 和 Linux 64 位可执行程序

# Mac
SET CGO_ENABLED=0
SET GOOS=darwin
SET GOARCH=amd64
go build main.go

# Linux
SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build main.go

2、Mac 下编译 Linux 和 Windows 64 位可执行程序

# Linux
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go

# Windows
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go

3、Linux 下编译 Mac 和 Windows 64 位可执行程序

# Mac
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go

# Windows
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go

WARNING

注意:交叉编译不支持 CGO ,所以要使用 CGO_ENABLED=0 禁用它。

Last updated: