【问题标题】:Cannot get cabal to find the mpi library for haskell-mpi on Windows [closed]无法让 cabal 在 Windows 上找到用于 haskell-mpi 的 mpi 库 [关闭]
【发布时间】:2011-04-22 20:41:15
【问题描述】:

问题已解决!

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

现在 haskell-mpi 应该在 windows 上构建。预计会有更多麻烦,但它成功了,并且解决了我的问题。


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

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

这里有什么可以识别的缺失吗?

在这一点上我很困惑。几乎任何建议都会有所帮助。

此致,巴伦德。

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 现在可以构建了!

将逐步详细信息放在顶部。

【问题讨论】:

  • 为什么这太本地化了?现在关闭它并不重要,因为 dons 已经回答了它,但它应该适用于任何想在 Windows 上使用 haskell-mpi 的人。
  • 它也可能与完全不同的 haskell-vs-dll-on-Windows 问题相关(至少它似乎是my issue 的可能解决方案,尽管该解决方案对我没有帮助:(

标签: windows haskell ghc cabal mpich


【解决方案1】:

我需要知道 mpi 依赖到底是什么意思

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

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

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

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

所以尝试设置路径以包含头文件和库的路径。

【讨论】:

  • 这并不是我的全部解决方案,但事实证明它是其中的大部分,并让我走上了发现其余部分的道路。在实际构建之前,我必须重命名一个文件。非常感谢。
猜你喜欢
  • 2018-05-16
  • 2012-03-12
  • 2021-03-08
  • 2010-11-27
  • 1970-01-01
  • 2013-12-22
  • 2021-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多