无法让 cabal 在 Windows 上找到 haskell-mpi 的 mpi 库 [关闭]

2023-12-07

问题解决了!

  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依赖实际上意味着并弄清楚我将如何满足它,以便这个库可以真正构建。以下是目前上述两个文件夹中的内容:

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

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


我需要知道 mpi 依赖项的实际含义

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

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

根据到维基百科,假设你有 mingw 或 msys,

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法让 cabal 在 Windows 上找到 haskell-mpi 的 mpi 库 [关闭] 的相关文章

  • 用于新 Windows 游戏项目的 OpenGL 或 Direct3D?或者是其他东西?

    我正在 Windows 上启动一个爱好游戏项目 该项目将大量使用 3D 图形效果 它很可能是用 C 编写的 我应该使用 OpenGL 还是 Direct3D 作为我的图形后端 为什么 或者我应该使用现成的图形引擎 例如OGRE 3D htt
  • 函数式语言中的部分求值和函数内联有什么区别?

    我知道 函数内联就是用函数定义代替函数调用 部分评估是在编译时评估程序的已知 静态 部分 在 C 等命令式语言中 两者之间存在区别 其中运算符与函数不同 但是 在像 Haskell 这样的函数式语言 其中运算符也是函数 中 两者之间有什么区
  • WndProc调用机制(WinAPI)

    我试图了解 Windows 应用程序是如何工作的 有一个WndProc函数 其中发生消息处理 LRESULT CALLBACK WndProc HWND hwnd UINT msg WPARAM wParam LPARAM lParam s
  • Parsec.Expr 具有不同优先级的重复前缀

    Parsec Expr buildExpressionParser 的文档说 相同优先级的前缀和后缀运算符只能出现一次 即 如果 为前缀否定 则不允许使用 2 但是 我想解析这样的字符串 具体来说 考虑以下语法 sentence ident
  • 如何停止执行的 Jar 文件

    这感觉像是一个愚蠢的问题 但我似乎无法弄清楚 当我在 Windows 上运行 jar 文件时 它不会出现在任务管理器进程中 我怎样才能终止它 我已经尝试过 TASKKILL 但它对我也不起作用 On Linux ps ef grep jav
  • Docker Desktop 不会切换到 Windows 容器(在 Windows 10 上)

    我有 Windows 10 专业版 版本 21H1 BIOS 中已启用虚拟化 Hyper V 正在运行 我已经安装了适用于 Windows 的 Docker Desktop 如上所述here https docs docker com de
  • 推送更改到 Git 不起作用

    每次我想要提交命令 git push heroku master 时 系统都会要求我在 PowerShell 中输入凭据 当我输入 heroku 凭据 默认情况下连接到 git 时 我收到错误消息 但是 当我输入我的主目录中的 netrc
  • 如何在 Windows 上使用命令行获取 svn 修订信息

    我正在尝试使用此命令行获取头部的修订信息 svn info https myserver branches Code Improvements rHEAD find Revision 然而 这返回修订版 1234 由于我使用 svn inf
  • 如何在 Windows 上应用差异补丁?

    有很多程序可以创建差异补丁 但我在尝试应用一个程序时遇到了很大的困难 我正在尝试分发补丁 但用户向我询问了如何应用该补丁 于是我尝试自己弄清楚 结果发现我毫无头绪 而且我能找到的大多数工具都是命令行的 我可以处理命令行 但是如果没有一个漂亮
  • Web 应用程序的带宽和流量模拟器?

    您能否建议如何创建一个测试环境来模拟 Web 应用程序中的各种类型的带宽和流量 或者也许是一个针对本地主机执行此操作的开源程序 我认为在编写网络应用程序时这是一个非常重要的主题 但这不是一个常见的主题 我能想象创建这种环境的唯一方法是在本地
  • fopen_s 怎么会比 fopen 更安全呢?

    我正在处理遗留代码Windows平台 当我编译代码时VS2013 它给出以下警告 错误 C4996 fopen 该函数或变量可能不安全 考虑使用fopen s反而 要禁用弃用 请使用 CRT SECURE NO WARNINGS 详情请参见
  • Go 编译器有窗口化设置选项吗?

    我正在使用 Go 6g 编译 GTK 应用程序 我想知道是否有编译器 链接器选项使其成为 Windows 可执行文件而不是控制台可执行文件 MinGW 有一个 mwindows 选项来实现此目的 目前我必须使用十六进制编辑器手动更改 PE
  • Haskell 点运算符

    我尝试在 Haskell 中开发一个简单的平均函数 这似乎有效 lst 1 3 x fromIntegral sum lst y fromIntegral length lst z x y 但是为什么下面的版本不行呢 lst 1 3 x f
  • 为什么 mod 在表达式中给出的结果与在函数调用中给出的结果不同?

    假设有人想要计算函数 f x y x mod 3 y mod 3 mod 2 那么 如果再展开f 1 0 手动 可以得到 1 mod 3 0 mod 3 mod 2 1 然而 如果使用内联函数 结果是 let f x y x mod 3 y
  • 使用 INF 文件 C++ 以编程方式安装驱动程序

    这里有人可以告诉我如何安装第 3 方设备驱动程序吗 如果提供了所有必需的文件 即 inf 文件 sys 等 则以编程方式进行 这 该解决方案应运行的最低操作系统是Windows2000 我尝试复制 inf文件放入Win文件夹 INF文件夹和
  • PHP 7.0.5:使用未定义的常量 FTP_BINARY - 假定为“FTP_BINARY”

    在 Windows IIS 上升级到 PHP 7 0 5 终于有了 sqlsrv PDO 驱动程序 我正在使用 Laravel 5 1 当尝试连接到 FTP 驱动器时 出现以下错误https github com thephpleague
  • 在重定向文件 (>output.txt) 中显示带重音符号的字符

    example mode con cp gt tmp output tmp notepad tmp output tmp show Statut du p riph rique CON Page de codes 850 代替 Statut
  • 检查 Win32 线程是否正在运行或处于挂起状态

    如何检查 Win32 线程是否正在运行或处于挂起状态 我找不到任何提供线程状态的 Win32 API 那么如何获取线程状态呢 我认为 最初 没有提供此信息 因为任何提供此信息的 API 都会产生误导且无用 考虑两种可能的情况 当前线程已挂起
  • 从 Qt 更改屏幕分辨率?

    我想更改屏幕分辨率 然后使用一个 ActiveX 控件 Flash 播放器 进入全屏 显然 仅适用于 Windows 的解决方案就可以了 有 Qt api 吗 还是我需要深入研究 winapi 如果是这样 我该在哪里查找 关键字 谢谢您的帮
  • UnicodeDecodeError:“charmap”编解码器|安装 pip python-stdnum==1.8 时出错

    我对编程还很陌生 所以请耐心等待 当我为正在使用的模块安装一些必需的软件包时 我无法安装python stdnum 1 8 我收到以下错误消息 File C Users 59996 AppData Local Programs Python

随机推荐