2009-12-22 35 views
3

如何告訴ghc告訴ld將編譯的二進制文件鏈接到SDL庫?鏈接到Haskell中的SDL和其他庫

我有一個source.hs:

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

當我這樣做:

ghc source.hs 

我收到了一堆鏈接類似錯誤這一個:

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

上午什麼我做錯了?

回答

6

如果你不想使用GHC的--make選擇某種原因,這應該工作:ghc source.hs -lSDL -package SDL

如果你想要一些非核心SDL子庫,你必須單獨包括那些,例如,ghc source.hs -lSDL -SDL_ttf -package SDL -package SDL-ttf

您可能還想考慮使用cabal(Haskell打包系統)來設置構建文件,特別是如果您的程序擴展超過一對源文件。

還有一句警告 - 你沒有提到你使用的是什麼操作系統,但是上次我試過Haskell的SDL綁定只能在Linux上「開箱即用」--Windows和OS X都會導致它由於SDL在這些平臺上啓動時使用的醜陋攻擊而出現問題。

+0

@camccann:我在Linux上。使事情奏效。這只是我有點困惑,爲什麼我以前編譯的源代碼之前沒有工作 - 製作。我想這是因爲沒有進口聲明,對吧? – Alex 2009-12-23 02:41:53

+0

至少沒有在非核心軟件包中引入的import語句;軟件包「base」會默認自動鏈接,並且包含您要導入的所有其他模塊以及其他許多模塊。 – 2009-12-23 15:06:57

+0

哦,還有一點不請自來的建議:'Graphics.UI.SDL'只有很少的文檔,但大多數情況下它只是使用Haskell類型的SDL C API的一個簡單封裝。所以,如果你需要使用它的參考資料,那麼C中的任何內容都應該很容易翻譯。玩的開心! – 2009-12-23 15:17:57

3

添加--make,其中包括鏈接階段。