编译Cygwin中的Haskell代码,以及Windows上的Haskell平台中的一些其他错误

时间:2012-01-12 06:16:09

标签: haskell ghci haskell-platform winghci

我正在尝试使用Haskell Platform 2011.2.0.1在Haskell中编译一个简单的hello world程序。如果我在WinGHCi中加载代码,并使用GUI进行编译,则会创建.exe。然后我可以从Cygwin运行.exe。

但是如果我尝试在Cygwin中编译代码(使用ghc --make),则链接器会失败。但是,如果我从Windows cmd提示符编译,那么编译+链接器工作正常。

我需要将任何其他环境变量导入Cygwin,以使编译+链接器工作吗?我在Cygwin PATH中添加了以下目录:2011.2.0.1/lib/extralibs/bin2011.2.0.1/bin(这些是我在Windows环境变量中可以看到的唯一两个有效的Haskell相关条目。)

我还注意到Windows环境变量中有几个无效项(这看起来像是Haskell安装中的一个错误):

  1. (system var)C/ProgramFiles/Haskell/bin - 这个目录不存在,因为我在D盘中安装了Haskell。
  2. (user var)userxxx/ApplicationData/cabal/bin - 此目录不存在。
  3. 我试图在HaskellPlatform中提交错误报告,但我没有权限这样做。

1 个答案:

答案 0 :(得分:3)

如果无法访问您的开发环境或您收到的错误列表,我只能假设该问题与您设置PATH的方式有关。

Windows上的GHC捆绑了自己的gcc编译器(用于C代码)和ld链接器。如果你已经安装了Cygwin,你可能还安装了MinGW工具链,它附带了自己的gccld版本。然后,您可能在Haskell Platform二进制目录的路径之前创建了PATH变量列表/usr/bin,这使得ghc在找到MinGW链接器和C编译器之前找到它们的版本与GHC捆绑在一起。

您需要确保在Cygwin目录之前列出了HP目录。它应该不是这样的:

$ echo $PATH
/bin:/usr/bin:.../2011.2.0.1/bin

相反,它应该是这样的:

$ echo $PATH
.../2011.2.0.1/bin:/bin:/usr/bin

这只是对问题可能的猜测,你应该提供更多细节以便更好地诊断。