Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Cygwin中编译Haskell代码,以及在Windows上的Haskell平台中编译其他一些错误_Haskell_Ghci_Haskell Platform_Winghci - Fatal编程技术网

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

在Cygwin中编译Haskell代码,以及在Windows上的Haskell平台中编译其他一些错误,haskell,ghci,haskell-platform,winghci,Haskell,Ghci,Haskell Platform,Winghci,我正在尝试用Haskell平台2011.2.0.1在Haskell中编译一个简单的hello world程序。如果我在WinGHCi中加载代码,并使用GUI进行编译,则会创建.exe。然后我可以从Cygwin运行.exe 但如果我尝试在Cygwin中编译代码(使用ghc--make),链接器就会失败。但同样,如果我从Windowscmd提示符编译,那么compile+链接器工作正常 是否有任何其他环境变量需要导入Cygwin,以使compile+链接器在其中工作?我在Cygwin路径中放置了以下

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

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

是否有任何其他环境变量需要导入Cygwin,以使compile+链接器在其中工作?我在Cygwin路径中放置了以下目录:
2011.2.0.1/lib/extralibs/bin
2011.2.0.1/bin
(这是我在Windows环境变量中可以看到的唯一两个有效的Haskell相关条目)

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

  • (系统变量)
    C/ProgramFiles/Haskell/bin
    -此目录不存在,因为我已在D磁盘中安装了Haskell
  • (用户变量)
    userxxx/ApplicationData/cabal/bin
    -此目录不存在

  • 我试图在Haskell平台中提交错误报告,但我没有这样做的权限。

    如果无法访问您的开发环境或获得的错误列表,我只能假设问题与您设置
    路径的方式有关

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

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

    $ echo $PATH
    /bin:/usr/bin:.../2011.2.0.1/bin
    
    $ echo $PATH
    .../2011.2.0.1/bin:/bin:/usr/bin
    
    相反,它应该是这样的:

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

    这只是对问题的猜测,您应该提供更多详细信息以便更好地诊断。

    谢谢。我怀疑这就是问题所在,所以我确实把haskell项目放在了路径的前面。但问题依然存在。这是我的路径:/cygdrive/d/sw2/Haskell Platform/2011.2.0.1/lib/extralibs/bin:/cygdrive/d/sw2/HaskellPlatform/2011.2.0.1/bin:.:/cygdrive/d/sw2/jdk6.24/bin:/home/user1/install/bin:/usr/local/bin:/usr/openwin/bin:/usr/bin:/etc:/usr/proc/bin:/usr/sbin:/cygdrive/d/mswin/jdk6u10/bin:/cygdrive/d/src/mswin_utils/ant_1.7.1/bin:/cygdrive/d/sw2/rive/silog/envi在编译变量时取得了一些进展,并尝试过一次重置。事实证明,当我从类路径中删除quicktime(QTJava.zip)和clojure的项时,链接器就工作了。但是,为什么它在同样具有相同类路径的windows cmd中也失败了呢?这是haskell平台中的一个bug吗?haskell不使用Java
    类路径
    ,因此当您更改该变量时,它会起作用只是巧合。但这是一个一致的巧合-对于不同的用户、不同的机器以及cygwin和haskell平台的新安装也是如此。所以,如果haskell不使用类路径,那么它就是cygwin中的一个bug。谢谢