Fyne 系列 13:跨平台编译方案
cbowen

普通 Go 命令行程序经常可以用 GOOSGOARCH 直接交叉编译。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
2
3
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]

每个平台安装 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 固定构建环境。

跨平台编译的目标不是一条命令打天下,而是让每个平台的依赖和产物都可重复。

 评论
评论插件加载失败
正在加载评论插件