golang 的交叉编译

2023年 10月 11日 69.1k 0

前言

交叉编译: 在一个平台上编译,然后放到另外一个平台去执行。

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

相关文章

服务器端口转发,带你了解服务器端口转发
服务器开放端口,服务器开放端口的步骤
产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
如何使用 WinGet 下载 Microsoft Store 应用
百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

发布评论