2014-01-21 9 views
6

Also versuche ich das Plugins-Paket zu verwenden, um dynamisch eine Haskell-Funktion aus einer Quelldatei zu laden. Die Quelldatei hängt von einem Paket foo mit Modul Foo.Bar ab. Ich führe mein Projekt in einer Cabal Sandbox, wo ich foo installiert habe. Sowohl mein Hauptprogramm als auch das Modul, das ich mit Plugins lade, hängen von foo ab. Ich bekomme immer eine der folgenden zwei Fehler:Haskell Plugins und Cabal Sandbox

Als ich foo in ~/.cabal installiert haben, ich den Fehler:

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. 

Wenn ich es nicht in ~/.cabal installiert haben, bekomme ich eine Standard " Modul nicht gefunden "Fehler. Und wenn ich es nicht in meiner Sandbox installiert habe, bekomme ich den gleichen Modul nicht gefunden Fehler, der versucht, meinen Hauptprogrammcode zu kompilieren.

Die Plugins-Dokumentation ist bestenfalls knapp. Irgendwelche Gedanken darüber, wie man das löst?

+4

Es wäre hilfreich, wenn Sie ein Minimum, Kompilierung, Beispiel geben würden. –

+2

Ich werde das morgen tun. Es ist derzeit in einem ziemlich großen yesod-Projekt, ich muss den minimalen Teil extrahieren. – jmite

+0

Ich habe Probleme mit einem minimalen Beispiel. Irgendwelche Ideen? – jmite

Antwort

1

Ich habe dies funktioniert mit System.Plugins.Make, um die Kompliation tatsächlich zu tun, anstatt sich auf bereits vorhandene Objektdateien. Nicht eine vollständige Lösung, erklärt das Problem nicht, aber es funktioniert für mich für jetzt.