haskell 初学者在这里。 (操作系统:WSL Debian)
我想设置 sdl2,以便我可以使用 haskell 编译 sdl2。
当我第一次尝试使用 SDL2 进行编译时,出现以下错误:
$ cat sdl2_test.hs
import SDL
main :: IO ()
main = do
...
$ ghc sdl2_test.hs -lsdl2
[1 of 2] Compiling Main ( sdl2_test.hs, sdl2_test.o )
sdl2_test.hs:1:1: error:
Could not find module ‘SDL’
Use -v (or `:set -v` in ghci) to see a list of the files searched for.
|
1 | import SDL
| ^^^^^^^^^^
当我编译包含SDL2的C程序时,它会自动工作,但在haskell中不起作用。
然后我了解到我需要为 SDL2 导入不同的模块才能使用 haskell 进行编译,但它需要“cabal”。
如何在不使用 cabal 的情况下使用 sdl2 编译 haskell 文件?
注意: 以下答案假设您使用的是官方 Debian
ghc
软件包。 如果不是,请使用有关如何安装 Haskell 的一些信息(例如,使用 GHCup 或其他方法)更新您的问题。
无论如何,如果您使用 Debian
ghc
软件包进行 Haskell 安装,那么最简单的方法就是安装兼容的 libghc-sdl2-dev
Debian 软件包。 这包括缺少的 SDL
模块,并且还将安装您需要的所有库依赖项(尽管如果您安装了 libsdl2-dev
,大多数应该已经安装)。
在新安装的 Debian bookworm 上,我安装了
ghc
和 libghc-sdl2-dev
,然后准备启动 ghci
并导入 SDL
模块:
$ apt install ghc libghc-sdl2-dev
...
$ ghci
GHCi, version 9.0.2: https://www.haskell.org/ghc/ :? for help
ghci> import SDL
ghci>
我还编译了一个测试文件:
$ cat sdl2_test.hs
import SDL
main :: IO ()
main = initializeAll
$ ghc sdl2_test.hs
[1 of 1] Compiling Main ( sdl2_test.hs, sdl2_test.o)
Linking sdl2_test ...
$ ./sdl2_test
$
警告: 您不应该 将 -lsdl2
添加到
ghc
命令行。 (这只会导致错误。)由于程序中的
import SDL
行,GHC 将自动链接到正确的库。