前言
交叉编译: 在一个平台上编译,然后放到另外一个平台去执行。
Go 官方工具链支持超级简单的交叉编译功能,只需要改变环境变量,而且编译的工具是 Go 内置的,因此十分的方便,这里总结一下,以便后续使用时查找。
交叉编译指令
Linux/Mac 支持一次性更改其环境变量,因此其交叉编译更为简单。
编译环境 | 执行环境 | 指令 |
---|---|---|
Linux | Mac | CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go |
Linux | Windows | CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go |
Mac | Linux | CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go |
Mac | Windows | CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go |
在 Windows 下编译与 Linux/Mac 略有不同,只能手动设置环境变量,而不能只一次性更改其环境变量,因此相对复杂一点。
# Linux 下执行
SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build main.go
# Mac 下执行
SET CGO_ENABLED=0
SET GOOS=darwin
SET GOARCH=amd64
go build main.go
补充:
当我们使用的 Go 语言版本 >= 1.13 时候,直接使用 set 已经不管用了,可以使用 go env -w 命令进行设置。例如:设置 GOOS=linux 的命令 go env -w GOOS=linux
参数详解
-
CGO_ENABLED : CGO 用于在 GO 代码中使用 C 语言编程,由于交叉编译中不支持,因此要禁用,CGO_ENABLED = 0 表示禁用 CGO。(go 默认是开启 CGO 工具,可以使用 go env 命令查看)
-
GOOS : 目标平台的操作系统。
-
GOARCH:目标平台的计算机架构。
系统 | GOOS | GOARCH |
---|---|---|
Windows 32位 | windows | 386 |
Windows 64位 | windows | amd64 |
OS X 32位 | darwin | 386 |
OS X 64位 | darwin | amd64 |
Linux 32位 | linux | 386 |
Linux 64位 | linux | amd64 |