这个问题不太可能对任何未来的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。为了帮助使这个问题更广泛地适用,访问帮助中心 。
问题解决了!
按照 Dons 发布的说明进行操作here
打开环境变量(我的电脑 -> 属性(在上下文菜单中) -> 高级)
添加或创建新的环境变量C_INCLUDE_PATH
所以它指向 MPI 的包含目录。就我而言,/c/program files/mpich2/include
.
添加或创建新的环境变量LIBRARY_PATH
所以它指向 MPI 的 lib 目录。就我而言,/c/program files/mpich2/lib
以某种方式隐藏 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
依赖实际上意味着并弄清楚我将如何满足它,以便这个库可以真正构建。以下是目前上述两个文件夹中的内容:
Libs:
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
Include:
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”,但我不允许创建新标签。我想还没有人真正使用过它。
编辑:按照唐斯的建议,
我安装了 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_PATH
and echo %LIBRARY_PATH%
现在两者都按预期工作,没有什么惊喜。环境变量已设置。取得进展。
cabal install haskell-mpi
仍然产生与之前相同的输出。
和ld玩了好久,巨大的红鲱鱼……
我必须从 ld 中隐藏 libmpi.a 才能使其正常工作,但 haskell-mpi 现在可以构建了!
将逐步详细信息放在顶部。