我有一个与Haskell库捆绑在一起的C库(并从中调用) . 我使用的自定义版本与 cabal
, Makefile
和 Setup.hs
文件几乎完全相同here . 我也想使用GHCi,所以我的 Makefile
创建了一个动态( .so
)库以及静态( .a
)库 .
注意:我认为GHCi必须使用动态库;如果我对此错了,那么也许有一个更简单的解决方案 .
我可以通过将显式路径传递给.so文件来使GHCi在此环境中工作 . 这篇文章是关于如何使 stack ghci
工作 . 产生的主要错误是 cannot find libfoo.so
(由于在cabal文件中添加 extra-libraries: foo
) . 使用-v显示堆栈没有查看我在Setup.hs脚本中修改的"extra-lib-dirs"路径(可能是错误bug) . stack ghci
does 在"extra-lib-dirs"中查找cabal文件中指定的库 . 不幸的是,由于cabal bug,我无法为extra-lib-dirs指定相对路径:它会导致 cabal configure
和 stack build
失败并出现相同的错误 .
我不想在系统范围内安装我的C库(这将通过允许我在extra-lib-dirs中使用绝对路径来解决问题) .
具体问题:
-
我需要
.so
文件才能使用GHCi吗? -
如何判断
stack ghci
在相对路径中查找库的位置?
1 回答
This answer显示了一种更简洁的方法来包含带有Haskell库的C库,该库不需要使用
extra-libraries
或相对路径 . 我们的想法是让cabal完成所有繁重的工作,而不是使用自定义构建类型 .stack ghci
有效(由于GHC bug而对构建顺序有一些警告) .