2009-12-22 3 views
3

Comment indiquer à ghc de dire à ld de lier les binaires compilés à la bibliothèque SDL?Liaison à SDL et à d'autres bibliothèques dans Haskell

J'ai un source.hs:

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

Quand je fais:

ghc source.hs 

je reçois un tas de lier des erreurs similaires à celui-ci:

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

Qu'est-ce que Je fais mal?

Répondre

6

Si pour une raison quelconque, vous ne voulez pas utiliser l'option --make de GHC, cela devrait fonctionner: ghc source.hs -lSDL -package SDL

Si vous voulez certains des sous-bibliothèques SDL non-core, vous devrez inclure les séparément Par exemple, ghc source.hs -lSDL -SDL_ttf -package SDL -package SDL-ttf

Vous pouvez également envisager de configurer un fichier de construction à l'aide de cabal, le système de conditionnement Haskell, en particulier si votre programme s'étend au-delà de quelques fichiers source. Et un mot d'avertissement - vous n'avez pas mentionné le système d'exploitation que vous utilisez, mais la dernière fois que j'ai essayé les liaisons SDL de Haskell, ça a marché "prêt à l'emploi" sous Linux - Windows et OS X Ce problème est dû à un bidouillage horrible que SDL utilise lorsqu'il se lance sur ces plates-formes.

+0

@camccann: Je suis sur Linux. La chose de travail a fonctionné. C'est juste que je suis un peu confus pourquoi les sources que j'ai l'habitude de compiler avant de travailler sans - faire. Je suppose que c'est parce qu'il n'y avait pas de déclarations d'importation, non? – Alex

+0

Aucune instruction d'importation tirée des packages non-core, au moins; le paquet "base" est automatiquement lié par défaut, et contient tous les autres modules que vous importez ici, plus beaucoup d'autres. –

+0

Oh, et un dernier conseil non sollicité: 'Graphics.UI.SDL' a une documentation minimale, mais pour la plupart, c'est juste un léger wrapper autour de l'API C de SDL pour utiliser les types Haskell. Donc, si vous avez besoin de matériel de référence pour l'utiliser, tout élément en C devrait se traduire assez facilement. S'amuser! –

3

Ajouter --make, qui inclut la phase de liaison.

Questions connexes