Cabal构建本地依赖报错:组件不存在/无可用库组件
Haskell Cabal本地依赖库找不到组件问题解决
核心问题排查与修复步骤
检查依赖库的Cabal配置是否包含library块
Cabal只会将librarystanza定义的内容识别为可依赖的库组件。如果你的trisagion.cabal只有executable/test-suite等块,没有library块,就会触发“does not contain library”错误。
解决方法:在trisagion.cabal中添加library块,将需要被eeep依赖的类型类、模块暴露出来,示例如下:library exposed-modules: Trisagion.YourTargetModule -- 替换为实际要暴露的模块名 build-depends: base >=4.16 && <5 hs-source-dirs: src -- 对应你的库代码目录 default-language: Haskell2010确认库名与依赖声明完全一致
确保trisagion.cabal的library块中name字段严格为trisagion,和eeep的build-depends中的依赖名完全匹配(大小写、拼写均不能出错)。验证cabal.project的路径配置
在eeep目录的cabal.project中,必须正确引入trisagion的本地路径,正确写法示例:packages: . ../trisagion或者明确指定包位置:
package trisagion location: ../trisagion先单独构建依赖库
进入trisagion目录执行cabal build,确保其library组件能正常构建,排除自身的语法或配置错误。
额外注意事项
- 避免本地库名与Hackage上的库重名:之前的
bins问题就是因为Hackage已有同名库,Cabal可能优先尝试拉取远程版本而非本地版本,重命名为trisagion是正确操作,但必须补全library配置。 - 清理缓存:如果存在旧缓存干扰,可执行
cabal clean后重新构建。
内容的提问来源于stack exchange,提问作者G. Rodrigues
相关产品推荐
相关产品推荐

