Ich mache ein kleines Haskell-Spiel in Windows, wo ich jedes Mal antworten möchte, wenn der Benutzer eine Taste drückt. Weil ich unter Windows getChar
behaves strangely verwende, verwende ich FFI, um Zugriff auf getch
in conio.h
, wie beschrieben here. Der entsprechende Code lautet:cabal FFI-Abhängigkeit
Das funktioniert gut, wenn ich es in Ghci ausführen, oder kompilieren Sie es mit Ghc. Ich möchte auch versuchen, eine Clique Paket aus ihm heraus, so das sich von this Frage, ich gehören die folgenden in meiner Clique Datei:
...
executable noughts
Includes: conio.h
Extra-libraries conio
...
Aber wenn ich cabal configure
laufen, es sagt mir:
cabal: Missing dependency on a foreign library:
* Missing C library: conio
Es macht Sinn, weil in meinem Haskell Plattform-Verzeichnis, unter ...\Haskell Platform\2012.4.0.0\mingw
gibt es eine conio.h
Datei unter dem include
Verzeichnis, aber keine andere conio
Datei, um den Objektcode zur Verfügung zu stellen.
Mache ich das richtig, und wenn ja, wie kann ich herausfinden, welche Bibliothek in meine Cabal-Datei aufgenommen werden soll?
Es gibt verschiedene Bibliotheken, die die conio Funktionen. Haben Sie 'Extra-Libraries: crtdll' oder' Extra-Libraries: msvcrt' ausprobiert? Übrigens sollten Sie laut MSDN '_getch' anstelle von' getch' verwenden, aber die Headerdatei könnte das für Sie erledigen. –
Beachten Sie, dass dies nur ghc/ghci in Windows betrifft, und der Lösungscode funktioniert insbesondere in WinHugs nicht, daher müssen Sie nur mit diesem kompilieren, wenn es speziell Windows/ghc ist. – AndrewC
@Tinctorius Ich habe gerade 'Extra-Bibliotheken: msvcrt' und' Extra-Bibliotheken: crtdll' allein und in Kombination ausprobiert. Es hat die Ausgabe von 'cabal build' nicht verändert. Ich fand 'msvcrt.lib' und' crtdll.c' unter meiner Visual Studio-Installation und kopierte sie in meinen Ordner, aber es änderte nichts. – Boris