【问题标题】:Stack ghci with library将 ghci 与库堆栈
【发布时间】:2016-05-05 18:11:52
【问题描述】:

我有一个与 Haskell 库捆绑在一起(并从中调用)的 C++ 库。我正在使用带有cabalMakefileSetup.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 configurestack build 都失败并出现相同的错误。

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

具体问题:

  1. 是否需要.so 文件才能使用 GHCi?
  2. 我如何告诉stack ghcirelative 路径中查找库的位置?

【问题讨论】:

  • 可以设置LD_LIBRARY_PATH解决问题吗?
  • @ErikR 听起来很合理,但显然不是。当我设置 LD_LIBRARY_PATH 时,stack ghci 不会在那里寻找库。

标签: haskell haskell-stack


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2018-07-31
    • 2014-06-23
    • 2021-12-23
    • 2011-05-04
    • 2012-01-18
    • 1970-01-01
    • 2017-02-17
    • 2021-02-18
    • 1970-01-01
    相关资源
    最近更新 更多