2009-12-22 2 views
3

컴파일 된 바이너리를 SDL 라이브러리에 링크하도록 ghc에 지시하는 방법은 무엇입니까? Haskell의 SDL 및 다른 라이브러리에 연결

은 내가 source.hs 있습니다

import Prelude 
    import Graphics.UI.SDL as SDL 
    import Data.Maybe 
    import GHC.Word 
    import Control.Applicative 
    ... 

내가 할 경우 :

pong.o: In function `s1Ww_info': 
    (.text+0x449): undefined reference to `SDLzm0zi5zi9_GraphicsziUIziSDLziRect_Rect_con_info' 

무엇 오전 :

ghc source.hs 

나는이 하나와 유사한 오류를 연결하는 무리를 얻을 수 내가 잘못하고있어?

답변

6

당신이 GHC의 --make 옵션을 사용하지 않으려는 어떤 이유로,이 작업을해야하는 경우 : 당신이 비 핵심 SDL의 서브 라이브러리의 일부를 원하는 경우 ghc source.hs -lSDL -package SDL

것은 별도로 사람들을 포함해야합니다 (예 : ghc source.hs -lSDL -SDL_ttf -package SDL -package SDL-ttf

또한 하스켈 패키징 시스템 인 cabal을 사용하여 빌드 파일을 설정하는 것을 고려할 수도 있습니다. 특히 프로그램이 몇 개의 소스 파일을 확장하는 경우 특히 그렇습니다.

당신이 사용하고있는 운영체제에 대해 언급하지 않았지만, 마지막으로 하스켈의 SDL 바인딩을 시도한 것은 리눅스에서 "즉시 사용 가능"했습니다. Windows와 OS X 모두 SDL이 이러한 플랫폼에서 시작될 때 사용하는 못생긴 해킹으로 인해 문제가 발생합니다.

+0

@camccann : 저는 Linux를 사용하고 있습니다. make는 효과적이었습니다. 그것은 내가 전에 컴파일 한 소스가 없이는 왜 효과가 있었는지 약간 혼란 스럽습니다. 수입 계산서가 없기 때문이죠? – Alex

+0

적어도 비 핵심 패키지를 가져온 import 문은 없습니다. 패키지 "base"는 기본적으로 자동으로 링크되며 여기에 가져 오는 다른 모든 모듈과 많은 다른 모듈을 포함합니다. –

+0

오, 자발적인 조언의 마지막 비트 :'Graphics.UI.SDL'은 최소한의 문서를 가지고 있습니다 만, 대부분 하스켈 형식을 사용하는 SDL의 C API를 감싸는 얇은 래퍼 일뿐입니다. 그래서, 만약 당신이 그것을 사용하기위한 참조 자료가 필요하다면, C의 모든 것이 꽤 쉽게 번역되어야합니다. 재미있어! –

3

--make은 연결 상을 포함한다.