前言
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