Sto facendo un piccolo gioco Haskell in Windows, in cui vorrei rispondere ogni volta che l'utente preme un tasto. Perché getChar
behaves strangely su Windows, utilizzo FFI per accedere a getch
in conio.h
, come descritto here. Il codice di riferimento è:cabal Dipendenza FFI
foreign import ccall unsafe "conio.h getch" c_getch :: IO CInt
Questo funziona bene, quando l'eseguo in ghci, o compilare con GHC. Voglio anche provare a fare un pacchetto cabala fuori di esso, in modo che si estende da this domanda, includo il seguente nel mio file cabala:
...
executable noughts
Includes: conio.h
Extra-libraries conio
...
Ma quando ho eseguito cabal configure
, che mi dice:
cabal: Missing dependency on a foreign library:
* Missing C library: conio
Ha senso, perché nella mia directory della piattaforma haskell, sotto ...\Haskell Platform\2012.4.0.0\mingw
c'è un file conio.h
nella directory include
, ma nessun altro file conio
per fornire il codice oggetto.
Sto facendo questo nel modo giusto e, in tal caso, come posso scoprire quale libreria includere nel mio file cabal?
Ci sono varie librerie che forniscono le funzioni di Conio. Hai provato 'Extra-Libraries: crtdll' o' Extra-Libraries: msvcrt'? A proposito, secondo MSDN, dovresti usare '_getch' invece di' getch', ma il file di intestazione potrebbe farlo per te. –
Si noti che questo riguarda solo ghc/ghci in Windows, e il codice della soluzione non funziona in particolare in WinHugs, quindi è necessario compilarlo solo quando è specificamente Windows/ghc. – AndrewC
@Tinctorius Ho appena provato 'Extra-librerie: msvcrt' e' Extra-libraries: crtdll' da solo e in combinazione. Non ha cambiato l'output di 'cabal build'. Ho trovato 'msvcrt.lib' e' crtdll.c' sotto la mia installazione di Visual Studio, e li ho copiati nella mia cartella, ma non ha cambiato nulla. – Boris