【发布时间】:2016-05-05 18:11:52
【问题描述】:
我有一个与 Haskell 库捆绑在一起(并从中调用)的 C++ 库。我正在使用带有cabal、Makefile 和Setup.hs 文件的自定义构建,这些文件与here 描述的文件几乎相同。我也想使用 GHCi,所以我的 Makefile 除了静态 (.a) 库之外,还创建了一个动态 (.so) 库。
注意:我认为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 指定相对 路径:它会导致cabal configure 和stack build 都失败并出现相同的错误。
我不想在系统范围内安装我的 C++ 库(这将通过允许我在 extra-lib-dirs 中使用绝对路径来解决问题)。
具体问题:
- 是否需要
.so文件才能使用 GHCi? - 我如何告诉
stack ghci在relative 路径中查找库的位置?
【问题讨论】:
-
可以设置LD_LIBRARY_PATH解决问题吗?
-
@ErikR 听起来很合理,但显然不是。当我设置 LD_LIBRARY_PATH 时,
stack ghci不会在那里寻找库。
标签: haskell haskell-stack