在Miso sample-app执行stack setup时触发solver参数错误
解决Miso sample-app中
stack setup时的solver must be one of: modular错误 问题重现
在Miso的sample-app目录下执行stack setup时,触发了如下错误:
exit status: 1 stderr: solver must be one of: modular
调用栈信息:
error,在Cabal-2.0.1.0:Distribution.ReadE的libraries/Cabal/Cabal/Distribution/ReadE.hs:46:24处调用
原因分析
从详细日志能看出,ghcjs-boot在执行cabal命令时使用了--solver=topdown参数,但你当前使用的Cabal版本(2.0.1.0)已经不再支持topdown作为合法的solver选项,仅保留了modular,这直接导致ghcjs-boot执行失败,最终让stack setup以ExitFailure 1退出。
你的环境版本
- Stack: 1.6.3 x86_64 hpack-0.20.0
- Cabal: cabal-install 2.0.0.1,基于Cabal库2.0.1.0编译
解决方案
最直接且省心的办法是升级Stack到较新版本:
Stack 1.6.3是比较老旧的版本,后续的Stack版本已经适配了Cabal solver的变更,会自动处理ghcjs-boot的调用参数,避免这种不兼容问题。你可以通过官方安装脚本更新Stack,或者使用系统包管理器完成升级。
如果暂时无法升级Stack,也可以尝试以下手动修复方式:
- 找到
ghcjs-boot执行cabal命令的位置(通常位于Stack的本地缓存目录中) - 将命令中的
--solver=topdown参数替换为--solver=modular
不过这种方法需要定位具体文件,操作相对繁琐,优先推荐升级Stack的方案。
内容的提问来源于stack exchange,提问作者Nagarjuna Pamu
相关产品推荐
相关产品推荐

