目录

Go实现交叉编译,编译跨平台多端可执行文件

Go实现交叉编译,编译跨平台多端可执行文件

背景

之前给客户交付Go开发的工具时,对方既有Windows服务器又有Linux工作站,总不能在不同系统上重复编译。

后来发现Go原生支持的交叉编译简直是神器,上手后彻底解决了跨平台交付的麻烦。

相当于你可以在 windows 上开发,然后编译成 linux 可执行文件,上传到 linux 服务器上直接可执行(无需装 go 环境)

实现

Go的交叉编译核心是通过GOOSGOARCH两个环境变量指定目标平台,编译时工具链会根据这两个变量生成对应平台的二进制文件。

  • 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.exe

windows 环境下编译 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/