在Haskell中链接SDL和其他库

3
如何告诉ghc让ld将编译后的二进制文件链接到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'

我做错了什么?

2个回答

6
如果您不想使用GHC的--make选项,可以尝试以下命令:ghc source.hs -lSDL -package SDL
如果您需要使用非核心的SDL子库,则需要单独包含这些子库,例如:ghc source.hs -lSDL -SDL_ttf -package SDL -package SDL-ttf
如果您的程序超出了几个源文件,建议您考虑使用Haskell打包系统cabal来设置构建文件。
请注意,最后一次我尝试使用Haskell的SDL绑定时,只有Linux操作系统能够直接使用,Windows和OS X会出现问题,因为SDL在这些平台上启动时使用了一个丑陋的hack。

@camccann:我在Linux上。make的东西起作用了。只是有点困惑,以前编译时使用的源代码没有--make也能工作。我猜是因为没有导入语句,对吧? - Alex
不要导入任何非核心包的import语句,至少要导入“base”包,因为默认情况下它会自动链接所有其他模块,以及许多其他包含在其中的模块。 - C. A. McCann
哦,最后还有一点不请自来的建议:Graphics.UI.SDL文档很少,但大部分只是一个薄薄的包装器,用于使用Haskell类型的SDL C API。因此,如果您需要参考材料来使用它,任何C语言中的内容都可以很容易地转换过来。玩得开心! - C. A. McCann

3
添加--make,其中包括链接阶段。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接