在win32 / cygwin上编译haskell模块网络

时间:2013-06-13 04:00:43

标签: networking haskell

我正在尝试在win32 / cygwin上编译Network.HTTP(http://hackage.haskell.org/package/network)。但是,它确实失败并显示以下消息:

Setup.hs: Missing dependency on a foreign library:
* Missing (or bad) header file: HsNet.h
This problem can usually be solved by installing the system package that
provides this library (you may need the "-dev" version). If the library is
already installed but in a non-standard location then you can use the flags
--extra-include-dirs= and --extra-lib-dirs= to specify where it is.
If the header file does exist, it may contain errors that are caught by the C
compiler at the preprocessing stage. In this case you can re-run configure
with the verbosity flag -v3 to see the error messages.

不幸的是,它没有提供更多线索。 HsNet.h包含sys / uio.h,实际上不应包括在内,应该正确配置。

3 个答案:

答案 0 :(得分:3)

请勿使用cygwin,而是按照Johan Tibells方式

安装MSYS

Install the latest Haskell Platform. Use the default settings.

Download version 1.0.11 of MSYS. You'll need the following files:
    MSYS-1.0.11.exe
    msysDTK-1.0.1.exe
    msysCORE-1.0.11-bin.tar.gz

The files are all hosted on haskell.org as they're quite hard to find in the official MinGW/MSYS repo.

Run MSYS-1.0.11.exe followed by msysDTK-1.0.1.exe. The former asks you if you want to run a normalization step. You can skip that.

Unpack msysCORE-1.0.11-bin.tar.gz into C:\msys\1.0. Note that you can't do that using an MSYS shell, because you can't overwrite the files in use, so make a copy of C:\msys\1.0, unpack it there, and then rename the copy back to C:\msys\1.0.

Add C:\Program Files\Haskell Platform\VERSION\mingw\bin to your PATH. This is neccesary if you ever want to build packages that use a configure script, like network, as configure scripts need access to a C compiler.

这些步骤是Tibell用于编译网络包以获取胜利的步骤,我在大多数haskell平台版本上已成功使用过几次。

答案 1 :(得分:1)

可以在win32 / cygwin上构建网络。而上述步骤虽然有用(由Jonke提供)可能没有必要。

在执行配置步骤时,请指定

runghc Setup.hs configure  --configure-option="--build=mingw32"

因此,为mingw32配置了库,否则如果您尝试链接或使用网络库,则会获得链接或“未定义的引用”。

答案 2 :(得分:1)

This结合@Yogesh Sajanikar的回答让它对我有用(在win64 / cygwin上):

  
      
  • 确保路径上的gcc不是Mingw / Cygwin,但是   C:\ GHC \ GHC-6.12.1 \的mingw \ BIN \ gcc.exe
  •   

(运行

export PATH="/cygdrive/.../ghc-7.8.2/mingw/bin:$PATH" 

在Cygwin shell中运行cabal install network之前