在库中运行 Stack ghci

3

我有一个C++库,与Haskell库捆绑在一起并从中调用。我使用自定义构建,其中cabalMakefileSetup.hs文件几乎与这里描述的文件相同。我还想使用GHCi,因此我的Makefile创建了一个动态(.so)库,以及静态(.a)库。

注意: 我认为GHCi必须使用动态库;如果我对此错误,则可能有更简单的解决方案。

我可以通过传递.so文件的显式路径来使GHCi在这个环境中工作。本文介绍如何使stack ghci正常工作。主要错误是由于在cabal文件中添加extra-libraries: foo导致无法找到libfoo.so。使用-v可以发现,stack没有查找我在Setup.hs脚本中修改的"extra-lib-dirs"路径(possible bug bug)。stack ghci确实在cabal文件中指定的"extra-lib-dirs"路径中查找库。不幸的是,由于一个cabal bug,我不能为extra-lib-dirs指定一个相对路径:它会导致cabal configurestack build都失败并显示相同的错误。

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

具体问题:

  1. 我需要一个.so文件来使用GHCi吗?
  2. 如何告诉stack ghci在相对路径中查找库?

你能设置LD_LIBRARY_PATH来解决这个问题吗? - ErikR
@ErikR 听起来很合理,但显然并不是这样。当我设置LD_LIBRARY_PATH时,stack ghci不会在那里查找库。 - crockeea
1个回答

0

此回答展示了一种更干净的方法来将一个C++库与一个Haskell库包含在一起,而不需要使用extra-libraries或相对路径。 这个想法是让cabal完成所有繁重的工作,而不是使用自定义的构建类型。

stack ghci可以工作(由于GHC bug存在某些构建顺序的警告)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接