Fyne 系列 13:跨平台编译方案
普通 Go 命令行程序经常可以用 GOOS、GOARCH 直接交叉编译。Fyne 程序不一样,它依赖 CGO 和图形库,跨平台编译会复杂很多。
普通 Go 交叉编译
命令行程序常见写法:
1 | GOOS=windows GOARCH=amd64 go build -o mytool.exe |
但 Fyne 不是纯 Go 程序。它需要目标平台的 C 编译器、图形库和相关头文件。只设置 GOOS 往往不够。
本机编译最稳定
最稳妥的方式是在目标平台本机编译:
- Windows 产物在 Windows 上编译
- macOS 产物在 macOS 上编译
- Linux 产物在 Linux 上编译
这不一定优雅,但最容易排查问题。尤其是 macOS .app、签名、公证等流程,通常需要 macOS 环境。
CI 构建矩阵
如果项目需要长期发布,可以用 CI 分平台构建:
1 | strategy: |
每个平台安装 Go、Fyne CLI、系统依赖,然后执行 fyne package。
Linux 交叉编译的坑
Linux 下最常见的是缺少这些依赖:
- C 编译器
- OpenGL 开发库
- X11 开发库
- Wayland 开发库
错误信息里如果出现 fatal error: xxx.h: No such file or directory,一般就是缺少对应开发包。
方案选择
个人项目可以先本机编译。需要稳定发布时,用 GitHub Actions 等 CI 在不同系统上构建。Linux 产物可以进一步用 Docker 固定构建环境。
跨平台编译的目标不是一条命令打天下,而是让每个平台的依赖和产物都可重复。
评论
评论插件加载失败
正在加载评论插件