转44.Go 交叉编译 - 简书 (jianshu.com)
Go编译器可以为许多操作系统创建本机可执行二进制文件:Windows,Mac OS X,Linux,Android,iOS和一些鲜为人知的工具,例如plan9,solaris,freebsd,openbsd,netbsd,dragonfly。
它还为同一操作系统支持多种架构(CPU),例如 它可以生成32位和64位Windows二进制文件或intel,arm,ppc,mips Linux二进制文件。
更好的是,该工具链支持交叉编译,即您可以在Windows等上创建Linux或Mac二进制文件。
交叉编译非常容易,但仅适用于纯Go代码。 当程序通过CGO链接C库时,它不起作用,
交叉编译
默认情况下,go build生成与运行编译器的系统匹配的二进制文件。 即 如果您在具有Intel 64位CPU的Linux OS上运行它,它将为Linux OS和64位Intel CPU生成可执行文件。
要使其针对其他操作系统进行编译,请设置GOOS环境变量。
要使其针对其他体系结构(CPU)进行编译,请设置GOARCH环境变量。
要查看它们的当前值是什么,请运行go env。
GOOS的有效值:android,darwin,dragonfly,freebsd,js,linux,netbsd,openbsd,plan9,solaris,windows。
值darwin代表Mac OS和iOS。 值js代表Web汇编的编译。
GOARCH的有效值:arm,arm64、386,amd64,ppc64,ppc64le,mpis,mpisle,mps64,mips64le,s390x,wasm。
值386表示32位Intel兼容CPU,而amd64是64位Intel兼容CPU。 价值wasm适用于Web Assembly。
并非GOOS和GOARCH的所有组合都有效。 要查看所有可能的组合,请运行go tool dist list。
从Linux或Mac进行交叉编译的示例:
这是如何编译例如 对于Linux或Mac上的32位Windows:GOOS = windows GOARCH = 386 go build
这会将GOOS和GOOARCH临时设置为所需的值,然后运行go build。
我们还可以使用导出GOOS = windows在shell会话的生存期内设置它们。
从Windows交叉编译的示例:
在Windows上,当使用PowerShell并交叉编译到Linux和64位ARM处理器时:
$Env:GOOS = "linux"
$Env:GOARCH = "arm64"
go build
当心$Env:GOOS ="linux"在PowerShell会话期间设置GOOS变量,即它将影响所有将来的go build调用。
在Mac 或Linux上,交叉编译到Windows和64位AMD处理器时:(待验证)
go env -w SET GOOS= windows
go env -w SET GOARCH = amd64
go build
Cross-compiling with gox
如果需要交叉编译为所有可能的体系结构,则可以使用 https://github.com/mitchellh/gox.