使用库

时间:2016-05-05 18:11:52

标签: haskell haskell-stack

我有一个与Haskell库捆绑在一起的C ++库(并从中调用)。我使用的自定义版本的cabalMakefileSetup.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”路径( possible bug bug)。 stack ghci 确实在cabal文件中指定的“extra-lib-dirs”中查找库。不幸的是,由于cabal bug,我无法为extra-lib-dirs指定 relative 路径:它会导致cabal configurestack build失败错误。

我不想在系统范围内安装我的C ++库(这可以通过允许我在extra-lib-dirs中使用绝对路径来解决问题)。

具体问题:

  1. 我是否需要.so文件才能使用GHCi?
  2. 如何判断stack ghci相对路径中查找库的位置?

1 个答案:

答案 0 :(得分:0)

This answer显示了一种更简洁的方法,可以将C ++库与Haskell库包含在一起,而不需要使用extra-libraries或相对路径。我们的想法是让cabal完成所有繁重的工作,而不是使用自定义的构建类型。

stack ghci有效(由于GHC bug而对构建顺序有一些警告)。