无法让cabal在Windows上找到haskell-mpi的mpi库

时间:2011-04-22 20:41:16

标签: windows haskell ghc cabal mpich

问题已得到解决!

  1. 按照Dons发布的here
  2. 说明进行操作
  3. 打开您的环境变量(我的电脑 - >属性(在上下文菜单中) - >高级)
  4. 添加或创建一个新的环境变量C_INCLUDE_PATH,使其指向MPI的include目录。就我而言,/c/program files/mpich2/include
  5. 添加或创建一个新的环境变量LIBRARY_PATH,使其指向MPI的lib目录。就我而言,/c/program files/mpich2/lib
  6. 以某种方式隐藏libmpi.a。如果需要,您可以稍后解决此问题。这是一个黑客,但你不能没有这样做构建haskell-mpi,因为ld会失败。我将其重命名为_libmpi.a
  7. 现在haskell-mpi应该建立在Windows上。预计会遇到更多麻烦,但它已经建成了,它解决了我的问题。


    我想在我的一个大学实验室的实验室机器上使用haskell-mpi来完成我的并行计算课程的最终项目,但是我在试图让haskell-mpi针对MPICH2构建时遇到了麻烦。 / p>

    haskell-mpi几乎完全没有文档,并且通过他们的git存储库挖掘它帮助我编写了一些示例程序,但没有帮助我在Windows上设置它。在我的个人Linux系统上,我可以毫不费力地设置并运行针对MPICH2的haskell-mpi。

    问题可能在于cabal,MPICH2的安装方式,或者haskell-mpi的cabal配置,因此可以选择标签。

    我愿意在这里进行实验,以便进行故障排除,并根据需要添加更多信息,但最终我将无法再访问这些计算机。

    我在实验室中拥有管理员权限,因此如果问题出在MPICH2安装本身,我确实可以重新安装它。

    当我尝试安装haskell-mpi时,

    cabal失败如下:

    Resolving dependencies...
    Configuring haskell-mpi-1.0.0...
    cabal: Missing dependency on a foreign library:
    * Missing C library: mpi
    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.
    cabal: Error: some packages failed to install:
    haskell-mpi-1.0.0 failed during the configure step. The exception was:
    ExitFailure 1
    

    以下是我尝试给出的--extra-lib-dirs和--extra-include-dirs:

    --extra-lib-dirs="C:\Program Files\MPICH2\lib" 
    --extra-include-dirs="C:\Program Files\MPICH2\include"
    

    我已经尝试重新排序我放置那些标志的地方,使用短路径PROGRA~1以及这些的各种排列来逃避反冲。所以我不认为这会有所帮助。我需要知道mpi依赖实际意味着什么,并弄清楚我将如何满足它,以便这个库可以实际构建。以下是上述两个文件夹中的内容:

    利布斯:

     Volume in drive C has no label.
     Volume Serial Number is 5406-5C5C
    
     Directory of C:\Program Files\MPICH2\lib
    
    04/22/2011  01:20 PM    <DIR>          .
    04/22/2011  01:20 PM    <DIR>          ..
    01/31/2011  03:59 PM           515,704 cxx.lib
    01/31/2011  04:23 PM           137,434 fmpich2.lib
    01/31/2011  04:25 PM           410,982 fmpich2g.lib
    01/31/2011  04:29 PM           162,690 fmpich2s.lib
    01/31/2011  04:53 PM                 0 libfmpich2g.a
    01/31/2011  04:53 PM                 0 libmpi.a
    01/31/2011  04:53 PM           215,528 libmpicxx.a
    01/31/2011  04:16 PM            10,618 mpe.lib
    01/31/2011  04:46 PM           135,434 mpi.lib
                   9 File(s)      1,588,390 bytes
                   2 Dir(s)  221,505,835,008 bytes free
    

    包括:

     Volume in drive C has no label.
     Volume Serial Number is 5406-5C5C
    
     Directory of C:\Program Files\MPICH2\include
    
    02/01/2011  05:38 PM    <DIR>          .
    02/01/2011  05:38 PM    <DIR>          ..
    11/17/2009  09:46 PM             4,857 clog_commset.h
    11/02/2007  05:50 PM               696 clog_const.h
    01/31/2011  03:50 PM               731 clog_inttypes.h
    11/17/2009  09:46 PM             1,353 clog_uuid.h
    10/21/2010  01:20 PM               355 mpe.h
    11/17/2009  09:46 PM            11,102 mpe_log.h
    11/02/2007  05:50 PM             1,833 mpe_logf.h
    11/17/2009  09:46 PM             1,322 mpe_misc.h
    01/31/2011  03:50 PM            57,128 mpi.h
    01/31/2011  04:23 PM             3,251 mpi.mod
    01/31/2011  03:50 PM            97,267 mpicxx.h
    01/31/2011  03:51 PM            19,051 mpif.h
    01/31/2011  03:50 PM            16,765 mpio.h
    01/31/2011  04:23 PM            13,668 mpi_base.mod
    01/31/2011  04:23 PM            30,866 mpi_constants.mod
    01/31/2011  04:23 PM             7,802 mpi_sizeofs.mod
                  16 File(s)        268,047 bytes
                   2 Dir(s)  221,505,830,912 bytes free
    

    这里有什么东西可能被忽略了吗?

    此刻我很难过。几乎任何建议都会有所帮助。

    此致,Barend。

    PS:这应该标记为“haskell-mpi”,但我不允许制作新标签。我猜其他人还没有真正使用它。

    编辑:遵循Dons的建议,

    我安装了MingGW和MSYS。在运行mingw-get update之后,我使用mingw32-get来检索libtools,mingw32-utils和mingw32-binutils。我使用Windows配置GUI为整个系统设置了以下环境变量:

    LIBRARY_PATH="C:\Program Files\MPICH2\lib"
    C_INCLUDE_PATH="C:\Program Files\MPICH2\include"
    

    echo $LIBRARY_PATHecho %LIBRARY_PATH%现在都按预期工作,没有惊喜。设置环境变量。取得进步。

    cabal install haskell-mpi仍然会产生与之前相同的输出。

    长时间玩ld,巨大的红鲱鱼......

    我不得不从ld隐藏libmpi.a以使其工作,但haskell-mpi现在正在构建!

    在顶部放置一步一步的细节。

1 个答案:

答案 0 :(得分:3)

  

我需要知道mpi依赖实际意味着什么

extra-libraries: mpi表示Cabal会将-lmpi添加到ld链接器选项中。此外,处理标题的工具将在包含路径中进行搜索。

那么,我们如何帮助GHC和binutils找到那个库?

根据to the wiki,假设您有mingw或msys,

  

如果需要链接到C-software,请定义一个环境变量C_INCLUDE_PATH,其中列出了可以找到头文件的目录。要链接库,您还需要定义一个环境变量LIBRARY_PATH,列出可以找到.a和.lib文件的目录。

因此,请尝试设置路径以包含标头和库的路径。