Haskell 插件和 cabal 沙箱

标签 haskell ghc dynamic-linking cabal cabal-dev

因此,我尝试使用插件包从源文件动态加载 haskell 函数。源文件依赖于带有模块 Foo.Bar 的包 foo。我正在 Cabal 沙箱中运行我的项目,其中安装了 foo。我的主程序和我使用插件加载的模块都依赖于 foo。我总是收到以下两个错误之一:

当我在 ~/.cabal 中安装 foo 时,出现错误:

GHCi runtime linker: fatal error: I found a duplicate definition for symbol
  aizmvszmaizmlibzm0zi1_FooziBar_zdfTypeableBazzuds2_closure
whilst processing object file
  /home/joey/.cabal/lib/foo-0.1/ghc-7.6.3/HSfoo-0.1.o
This could be caused by:
  * Loading two different object files which export the same symbol
  * Specifying the same object file twice on the GHCi command line
  * An incorrect `package.conf' entry, causing some object to be
    loaded twice.
GHCi cannot safely continue in this situation.  Exiting now.  Sorry.

当我没有将其安装在 ~/.cabal 中时,我会收到标准的“找不到模块”错误。当我没有将其安装在我的沙箱中时,我会在尝试编译主程序代码时遇到相同的模块未找到错误。

插件文档充其量也很少。关于如何解决这个问题有什么想法吗?

最佳答案

我通过使用 System.Plugins.Make 实际进行编译来实现此目的,而不是依赖预先存在的目标文件。不是一个完整的解决方案,不能解释问题,但目前对我有用。

关于Haskell 插件和 cabal 沙箱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21249511/

相关文章:

macos - Mac动态库中的动态符号表?

linux - 无法运行任何命令,因为我移动了 libc.so 文件

haskell - 推断 if ... then ... else 奇怪的行为

haskell - 在 haskell 中设置计数器并增加它

haskell - cabal 沙箱 v. 全局包数据库

c - 在Linux平台上用C构建和链接.h(头)文件的动态库

haskell - 如何为类型级列表编写交集函数

haskell - 您能否说出您正在使用哪个 Haskell 记录实例,而不必每次使用字段时都重复它?

haskell - 尾递归识别

haskell - 当 thunk 被垃圾收集时,Haskell 会丢弃 Spark 吗?