2014-01-21 65 views
6

所以,我试图使用插件包从源文件动态加载haskell函数。源文件取决于包foo与模块Foo.Bar。我正在Cabal沙箱中运行我的项目,在那里我安装了foo。我的主程序和我使用插件加载的模块都取决于foo。我总是得到以下两个错误之一:Haskell插件和cabal沙箱

当我有安装在~/.cabalfoo,我得到的错误:

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,我得到一个标准的“模块未找到“错误。而当我没有安装在我的沙箱中时,我得到相同的模块未找到错误,试图编译我的主程序代码。

插件文档很少。有关如何解决这个问题的任何想法?

+4

如果你给出了最小值,编译,例子,这将是有益的。 –

+2

明天我会做这个。它目前是一个相当大的yesod项目,我需要提取最小的部分。 – jmite

+0

我有麻烦提出一个最小的例子。有任何想法吗? – jmite

回答

1

我得到这个工作通过使用System.Plugins.Make实际上做compliation,而不是依靠预先存在的对象文件。不是一个完整的解决方案,不能解释问题,但现在对我来说很有用。