我有一个与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”路径( possible bug bug)。 stack ghci
确实在cabal文件中指定的“extra-lib-dirs”中查找库。不幸的是,由于cabal bug,我无法为extra-lib-dirs指定 relative 路径:它会导致cabal configure
和stack build
失败错误。
我不想在系统范围内安装我的C ++库(这可以通过允许我在extra-lib-dirs中使用绝对路径来解决问题)。
具体问题:
.so
文件才能使用GHCi?stack ghci
在相对路径中查找库的位置?答案 0 :(得分:0)
This answer显示了一种更简洁的方法,可以将C ++库与Haskell库包含在一起,而不需要使用extra-libraries
或相对路径。我们的想法是让cabal完成所有繁重的工作,而不是使用自定义的构建类型。
stack ghci
有效(由于GHC bug而对构建顺序有一些警告)。