2014-01-21 3 views
6

그래서 플러그인 파일을 사용하여 소스 파일에서 haskell 함수를 동적으로로드하려고합니다. 소스 파일은 패키지 foo (모듈 Foo.Bar 포함)에 따라 다릅니다. Cabal 샌드 박스에서 프로젝트를 실행하고 있는데 여기에 foo이 설치되어 있습니다. 내 메인 프로그램과 플러그인을로드하는 모듈은 모두 foo에 의존합니다. 난 항상 다음과 같은 두 가지 오류 중 하나를 얻을 : 나는 foo~/.cabal에 설치되어있는 경우Haskell 플러그인과 Cabal 샌드 박스

, 나는 오류 얻을 : 나는 그것을 ~/.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. 

, 나는 표준 얻기를 " 모듈을 찾을 수 없습니다 "오류가 발생했습니다. 그리고 샌드 박스에 설치하지 않을 때 주 프로그램 코드를 컴파일하려고 할 때 동일한 모듈을 찾을 수 없습니다.

플러그인 문서는 기껏해야 부족합니다. 이 문제를 해결하는 방법에 대한 의견이 있으십니까?

+4

최소한의 컴파일 예제가 있으면 도움이 될 것입니다. –

+2

내일 할게. 그것은 현재 상당히 큰 yesod 프로젝트 안에 있습니다. 최소한의 부분을 추출해야합니다. – jmite

+0

나는 최소한의 예를 생각해 내는데 어려움을 겪고있다. 어떤 아이디어? – jmite

답변

1

System.Plugins.Make를 사용하여 기존 객체 파일을 사용하는 대신에 사실상 complication을 수행하여이 작업을 수행했습니다. 완전한 해결책은 아니지만 문제를 설명하지는 않지만 지금 당장 나를 위해 일합니다.