2014-01-21 2 views
6

Итак, я пытаюсь использовать пакет Plugins для динамической загрузки функции haskell из исходного файла. Исходный файл зависит от пакета foo с модулем Foo.Bar. Я запускаю свой проект в песочнице Cabal, где у меня установлен foo. Как моя основная программа, так и модуль, который я загружаю с помощью плагинов, зависят от foo. Я всегда получаю один из следующих двух ошибок:Плагины Haskell и песочница cabal

Когда я foo установлен в ~/.cabal, я получаю ошибку:

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, чтобы на самом деле сделать это, вместо того, чтобы полагаться на ранее существовавшие объектные файлы. Не полное решение, не объясняет проблему, но сейчас это работает для меня.