Go实现交叉编译,编译跨平台多端可执行文件
Go实现交叉编译,编译跨平台多端可执行文件
背景
之前给客户交付Go开发的工具时,对方既有Windows服务器又有Linux工作站,总不能在不同系统上重复编译。
后来发现Go原生支持的交叉编译简直是神器,上手后彻底解决了跨平台交付的麻烦。
相当于你可以在 windows 上开发,然后编译成 linux 可执行文件,上传到 linux 服务器上直接可执行(无需装 go 环境)
实现
Go的交叉编译核心是通过GOOS和GOARCH两个环境变量指定目标平台,编译时工具链会根据这两个变量生成对应平台的二进制文件。
-
GOOS:指定目标操作系统,比如windows、linux、darwin(对应macOS)、freebsd等 -
GOARCH:指定目标CPU架构,比如amd64(64位)、386(32位)、arm64、mips等
这里分享几个开发中最常用的组合(覆盖90%以上场景):
| 目标平台 | GOOS | GOARCH | 可执行文件后缀 |
|---|---|---|---|
| Windows 64位 | windows | amd64 | .exe |
| Linux 64位 | linux | amd64 | 无后缀 |
| macOS 64位(Intel) | darwin | amd64 | 无后缀 |
| macOS 64位(M1/M2) | darwin | arm64 | 无后缀 |
| Linux ARM64(树莓派4等) | linux | arm64 | 无后缀 |
实操
mac、linux 环境下交叉编译为 windows 环境可执行文件 exe:
## 编译Windows 64位程序(Mac、linux环境下)
GOOS=windows GOARCH=amd64 go build -o app.exewindows 环境下编译 mac、linux 环境可执行文件:
## 编译 arm 架构(windows 环境下编译)
GOOS=linux GOARCH=arm GOARM=7 go build
## 编译 amd 架构(windows 环境下编译)
GOOS=linux GOARCH=arm GOARM=7 go build注意⚠️:
-
编译后可直接运行,无需依赖 go 环境
-
赋予文件可执行权限:chmod +x 编译后可执行文件
-
编译后建议在对应的平台进行验证,避免出现问题
版权声明
未经授权,禁止转载本文章。
如需转载请保留原文链接并注明出处。即视为默认获得授权。
未保留原文链接未注明出处或删除链接将视为侵权,必追究法律责任!
本文原文链接: https://fiveyoboy.com/articles/go-cross-compile/
备用原文链接: https://blog.fiveyoboy.com/articles/go-cross-compile/