本文记录了在Windows下安装Haskell(ghc)的经验,Windows版本问W7。
在Windows下,安装ghc的主程序较为容易,标准的windows程序安装模式。但库的安装较麻烦,它的安装风格则更类似于linux风格,部分库有依赖性,不仅依赖其他Haskell库,也依赖第三方库。有些库不直接支持windows或者在Windows下没有经过良好的安装测试。具体问题具体分析,总是可以解决的,目前我希望安装的库最终都装上了。
基本方式:
下载后的Haskell库提供安装文件Setup.hs,可以通过如下三个命令实现安装。
runghc Setup.hs configure -- 配置,类似linux下的configure指令,部分安装包提供configure文件。
runghc Setup.hs build -- 编译
runghc Setup.hs install -- 安装,将编译后的代码拷贝到指定位置
如果库依赖一个未安装的库,则会安装失败,并提示需要安装被依赖的库。
Cabal:
有个工具可辅助安装库,Cabal。可以从官网下载代码通过基本方式安装,也有编译好的exe下载,放入path目录下,就可以运行。它可以根据提供的库的名称,从网上下载代码,解压,依次执行configure、build和install过程。cabal最大的优点是能分析依赖关系,自动下载和安装被依赖的库。下面是比较常用的指令。
cabal update -- 应该是从网上更新所有库的最新列表。
cabal list xxx -- 根据xxx查找相关的库,xxx可以是部分名称
cabal install xxx -- 先安装xxx库,这里的xxx必须是全名
编译问题:
安装Haskell库,遇到最多的问题是编译问题,
第一类,库不支持Windows,库使用了linux系统函数,无法在Window下完成编译,这个问题可以使用WinG/MSys解决。
第二类,库依赖第三方库,部分Haskell库只是其他库的一个封装,如界面库(gtk htk),需要安装例外独立的第三方库,安装后可能还需要配置环境变量等,告知第三方库的位置。
第三类,路径中的空格,如果你的MinGW或者ghc的安装路径有空格,如在Program File下,则会遇到这个问题。该问题就是在cmd下输入带空格的程序的全路径(路径不被双引号包围)出现的问题。可以修改安装文件,在路径的引用位置加入引号。或者可以多尝试几个安装方式,在cmd下使用基本方式和cabal方式,可以在MSys中使用基本方式和cabal方式,也可以在MSys中使用configure、make等原始指令或者原始指令和runghc Setup.hs交替使用。
安装路径:
有两个位置需要关注:库安装的位置和记录库安装位置的位置。ghc根据后者知道哪些库安装了,在何处加载它们。如果前者被删除,后者没有相应删除,则ghc依然认为库安装了,但加载失败。
ghc程序自带库的二者的位置为:“ghc安装路径\lib”和“ghc安装路径\lib\package.conf.d”。而后安装的库的位置,前者可以通过下面的命令安装在“xxx”路径下,
runghc Setup.hs configure --prefix="xxx"
cabal install xxx --prefix="xxx"
后者可以在系统盘中搜索“package.conf.d”目录来确定。
此外,cabal运行会生产一些数据如下载安装包等,在系统盘中搜索“cabal”目录可以找到数据存放位置,其中在config中可以修改cabal安装的默认路径。