使用 golang 的交叉编译生成 windows 可执行文件

文章目录

    需求场景

    公司内部的 IT 似乎不会使用 Linux,所以要交接的一个 golang gin 服务,我就不太敢部署在 Linux 上,想试试能否生成 windows 版本,然后设置成开机自启动,这样就不用操心了。

    即,在我的 Windows 10 WSL Ubuntu 开发环境下,编译出可以在 Windows 10 上运行的 Golang 二进制文件。

    交叉编译

    英文为 Cross Compiling。

    交叉编译器(英语:Cross compiler)是指一个在某个系统平台下可以产生另一个系统平台的可执行文件的编译器。

    还是翻译成“跨平台编译”比较好,“交叉”这个词太难理解了。

    跨平台编译的意义

    • 开发环境为 Linux,但是运行环境为 Windows;或者反之
    • 目标运行环境无法安装编译环境,例如单片机,其没有操作系统,所以无法直接编译,只能在其他系统上进行编译。

    Golang 的 Cross Compiling

    跨平台编译选项:

    示例:

    $ 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 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式