Windows10下用Stack构建gi-gtk-4.0.8的依赖问题求助
解决Windows下Stack构建gi-gtk4的依赖问题
核心问题分析
LTS 22.18的默认依赖栈是为GTK3设计的,gi-gtk4和配套的GI库(gi-gdk4、gi-graphene等)与GTK3系列库版本冲突,单独修改gi-gtk依赖会触发连锁问题。
推荐解决方向
1. 切换到支持GTK4的LTS快照(最省心)
- 查找包含gi-gtk4的LTS版本:运行
stack resolver list查看最新LTS,LTS 23及以后的版本已支持GTK4(可通过Hackage确认gi-gtk-4.0.8的兼容resolver) - 修改
stack.yaml中的resolver字段,例如:resolver: lts-23.5 - 保存后运行
stack build,Stack会自动下载并安装匹配的依赖链,无需手动处理extra-deps
2. 强行在LTS 22.18中兼容GTK4(适合必须保留当前LTS的场景)
- 完整添加GTK4依赖链:GI库版本绑定严格,不能只加gi-gtk4。去Hackage查询gi-gtk-4.0.8的依赖列表,将所有配套GI库的新版本加入
stack.yaml的extra-deps:extra-deps: - gi-gtk-4.0.8 - gi-gdk-4.0.6 - gi-graphene-1.0.3 - gi-gobject-2.0.30 - gi-glib-2.0.34 - gi-cairo-1.0.27 # 其他依赖的新版本,以Hackage上gi-gtk4的依赖为准 - 精准设置allow-newer:避免全局开启导致其他依赖冲突,只允许需要更新的GI库:
allow-newer: - gi-gtk - gi-gdk - gi-graphene - gi-gobject - gi-glib - gi-cairo - 在package.yaml中锁定gi-gdk版本:防止Stack回退到GTK3版本:
dependencies: - base >= 4.7 && < 5 - gi-gtk >=4.0 && <5 - gi-gdk >=4.0 && <5 # 其他依赖
3. 解决gi-graphene找不到Graphene-1.0仓库的问题
- 这个错误是系统缺少Graphene的C开发库,Windows下通过MSYS2安装:
- 打开MSYS2的MinGW64终端(必须选64位,匹配GHC 9.6.4)
- 运行
pacman -S mingw-w64-x86_64-graphene安装库 - 保持在MinGW64终端中运行
stack build,确保Stack能读取到MSYS2的环境变量
新手提示
- 优先选切换LTS的方案,手动维护extra-deps容易出现版本遗漏
- Windows下使用GI系列库,必须先通过MSYS2安装对应的C库(比如GTK4的库是
mingw-w64-x86_64-gtk4) - 每次修改配置后,先运行
stack build --dry-run检查依赖冲突,再执行实际构建
内容的提问来源于stack exchange,提问作者Ciuppo
相关产品推荐
相关产品推荐

