需求场景
公司内部的 IT 似乎不会使用 Linux,所以要交接的一个 golang gin 服务,我就不太敢部署在 Linux 上,想试试能否生成 windows 版本,然后设置成开机自启动,这样就不用操心了。
即,在我的 Windows 10 WSL Ubuntu 开发环境下,编译出可以在 Windows 10 上运行的 Golang 二进制文件。
交叉编译
英文为 Cross Compiling。
交叉编译器(英语:Cross compiler)是指一个在某个系统平台下可以产生另一个系统平台的可执行文件的编译器。
还是翻译成“跨平台编译”比较好,“交叉”这个词太难理解了。
跨平台编译的意义
- 开发环境为 Linux,但是运行环境为 Windows;或者反之
- 目标运行环境无法安装编译环境,例如单片机,其没有操作系统,所以无法直接编译,只能在其他系统上进行编译。
Golang 的 Cross Compiling
跨平台编译选项:
- GOOS - Target Operating System。详细列表参考 digital ocean 整理的 GOOS 和 GOARCH 清单。
- GOARCH - Target Platform
示例:
$ env GOOS=windows GOARCH=amd64 go build github.com/mholt/caddy/caddy
真实项目编译
以一个 golang gin web 服务为例:
在 Ubuntu 下执行
env GOOS=windows GOARCH=amd64 go build -o sunzhongwei.exe
然后将这个文件复制到 Windows 目录下,在 PowerShell 中执行
PS D:\to_del> .\sunzhongwei.exe
访问、操作一切正常。golang 的跨平台编译确实方便。
GOARCH 中 386 与 amd64 的区别
- 386 代表 32 位系统,也称为 i386。名字源于 Intel 80386 指令集。
- amd64 代表 64 位系统。名字源于 64 位指令集最早由 AMD 公司发布。
兼容性问题
有些三方库用到了 cgo,无法在 windows 下使用。所以,尽量使用标准库,避免兼容性问题。
参考
- https://zh.wikipedia.org/wiki/%E4%BA%A4%E5%8F%89%E7%B7%A8%E8%AD%AF%E5%99%A8
- https://github.com/golang/go/wiki/WindowsCrossCompiling
- https://www.digitalocean.com/community/tutorials/how-to-build-go-executables-for-multiple-platforms-on-ubuntu-16-04
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式