前言

Go语言支持交叉编译,即在一个平台上,可以生成另一个平台的可执行程序

参数

RunTime:go1.15.6

参数1:GOOS

作用:目标平台的操作系统

可选项:aix、android、darwin、dragonfly、freebsd、illumos、js、linux、netbsd、openbsd、plan9、solaris、windows

ps:其中darwin代表Mac OS,其他不再展开。

参数2:GOARCH

作用:目标平台的处理器架构

可选项:ppc64、ppc64le、386、amd64、arm、arm64、wasm、mips、mips64、mipsle、mips64le、riscv64、s390x

ps:其中386代表32位,因为80386处理器使用x86架构(指令集)首次将PC机从16位时代带入了32位时代,该架构处理器简称386便代表32位处理器沿用至今

amd64代表64位,因为AMD公司使用x86架构(指令集)首次将PC机带入64位时代,因是Intel公司x86指令集的延伸所以也叫x86-64,非官方写法很常见:x86_64,后更名AMD64,为了不偏向英特尔或AMD其他厂商一般称其前者,后为了图方便x64的读法便流行开来

其他不再展开

 

当然了,如果你想知道有多少种支持的组合方式,你可以使用命令go tool dist list查看

应用示例

以最高兼容性考虑,默认变量CGO_ENABLED已配置为0,不再单独配置

CGO_ENABLED配置为0将编译为纯静态程序,不依赖任何外部动态链接库

CGO_ENABLED默认为1,即调用动态链接库,有可能会使交叉编译出来的可执行程序无法在对应系统中运行

Windows环境

正常编译可执行程序

go build main.go

编译Linux平台可执行程序

SET GOOS=linux
SET GOARCH=amd64
go build main.go

Linux环境

正常编译可执行程序

go build main.go

编译Windows平台可执行程序

GOOS=windows GOARCH=amd64 go build main.go