Golang 支持交叉编译, 在一个平台上生成然后再另外一个平台去执行。
以下面代码为例
build
├── main.go
├── go.mod
main.go内容
package mainimport "fmt"func main() {fmt.Println("hello world")
}
windows系统上操作
1.cmd窗口编译
// 设置Linux编译环境
set CGO_ENABLED=0
set GOARCH=amd64
set GOOS=linux
go build main.go
修改的环境只在当前窗口生效,不影响整体环境
2.powershell窗口编译
// 设置Linux编译环境
$env:CGO_ENABLED="0"
$env:GOOS="linux"
$env:GOARCH="amd64"
go build main.go
修改的环境只在当前窗口生效,不影响整体环境
在cmd窗口和powershell窗口修改后,可以通过go env查看对应的变量已经更改。
Go交叉编译常用环境变量
- Go支持交叉编译通过以下几个环境变量来实现,一般交叉编译时,使用命令行临时更改以下环境变量的方式实现。
- CGO_ENABLE:是否支持C语言版本的GO编译器,如Go代码中调用了C代码,则交叉编译时必须指定为1,且还必须要指定CC变量。
- GOOS:目标操作系统,支持的选项为darwin\linux\windows。
- GOARCH:目标操作系统的架构,支持的常用选项为amd64\386\arm\arm64. 常用的GOOS和GOARCH对照表如下
GOOS | GOARCH | 说明 |
---|---|---|
darwin | amd64 | Mac 64位系统 |
darwin | arm64 | Mac 64位系统(ARM) |
linux | amd64 | Linux 64位系统 |
linux | 386 | Linux 32位系统 |
linux | arm64 | Linux 64位系统(ARM) |
linux | arm | Linux 32位系统(ARM) |
windows | amd64 | Windows 64位系统 |
windows | 386 | Windows 32位系统 |
windows | arm64 | Windows 64位系统(ARM) |
windows | arm | Windows 32位系统(ARM) |