致命错误:mpi.h:没有这样的文件或目录#include <mpi.h>

Posted

技术标签:

【中文标题】致命错误:mpi.h:没有这样的文件或目录#include <mpi.h>【英文标题】:fatal error: mpi.h: No such file or directory #include <mpi.h> 【发布时间】:2015-01-11 06:13:51 【问题描述】:

当我只用编译我的脚本时

#include <mpi.h>

它告诉我没有这样的文件或目录。 但是当我将 mpi.h 的路径包含为

#include "/usr/include/mpi/mpi.h"

(路径正确)返回:

In file included from /usr/include/mpi/mpi.h:2087:0,
                 from lbm.cc:7:
/usr/include/mpi/openmpi/ompi/mpi/cxx/mpicxx.h:35:17: fatal error: mpi.h: No such file or directory
 #include "mpi.h"
                 ^
compilation terminated.

有人知道如何解决这个问题吗?

【问题讨论】:

你的编译器和操作系统是什么? g++ 在 Linux 上。并且 也不起作用。 使用消息传递接口的程序应该使用mpicc main.c -o mainmpiCC main.cpp -o main之类的东西来编译。是你的情况吗?关于第二条消息:您的计算机上可能有两种 MPI 标准的实现。您可以通过输入which mpiccwhich mpirunmpirun --versionmodule avail 来尝试了解更多信息。编译器命令的实现(openmpi 或 mpich2 或...)必须与执行程序的命令mpirun -np 2 main 相同。 【参考方案1】:

问题几乎可以肯定是您没有使用 MPI 编译器包装器。无论何时编译 MPI 程序,都应该使用 MPI 包装器:

C-mpicc C++ - mpiCC, mpicxx, mpic++ FORTRAN - mpifort, mpif77, mpif90

这些包装器为您完成所有繁琐的工作,确保在您编译程序时包含所有适当的编译器标志、库、包含目录、库目录等。

【讨论】:

难题在于 openmpi 没有 mpicc、mpicxx 等的 MPI 包装器。 可能有一些实现不提供它们,但 Open MPI 不是其中之一。它肯定至少有mpiccmpicxxmpifortan 你能解释一下如何解决这个问题吗?我正在尝试制作某人的程序,它在原始帖子中给出了错误。它正在寻找 mpi.h。我使用 apt-get 安装了 api。仍然得到同样的错误。 没有提供有关如何使用这些包装器的信息;像-mpiCC一样将它们添加到编译器中,安装包装器并将其包含在源文件中? @user391339 和 Romario 默认情况下,您的 IDE 使用 cmake 左右来编译 .cpp 文件,对吗?.. 相反,您将使用 mpi 包装器(它只是一个编译/执行命令)来编译/执行你的程序。一个例子是:$ mpic++ main.cpp,一个运行你的程序的例子是 $ mpirun -np 2 a.out【参考方案2】:

在我的系统上,我只是缺少 Linux 软件包。

sudo apt install libopenmpi-dev
pip install mpi4py

(使用它的例子是一个很好的即时测试,看看它是否成功)

成功了。

【讨论】:

【参考方案3】:

你可以执行:

$ mpicc -showme 

结果:

gcc -I/Users/<USER_NAME>/openmpi-2.0.1/include -L/Users/<USER_NAME>/openmpi-2.0.1/lib -lmp

此命令显示编译 mpicc 所需的库

例子:

$ mpicc -g  -I/Users/<USER_NAME>/openmpi-2.0.1/include -o [nameExec] [objetcs.o...] [program.c] -lm


$ mpicc -g  -I/Users/<USER_NAME>/openmpi-2.0.1/include -o example file_object.o my_program.c otherlib.o -lm

这个命令在你的例子中生成可执行文件,你可以执行:

$ ./example

【讨论】:

您是否建议使用包装器来提取一些信息,然后再次将其传递给包装器?【参考方案4】:

在我的系统 Ubuntu 16.04 上。我安装了:

sudo apt install libopenmpi-dev

我用mpiCC编译后就可以了

【讨论】:

【参考方案5】:

如上所述,包含

/usr/lib/openmpi/include 

在包含路径中处理这个(在我的情况下)

【讨论】:

/usr/lib64/mp​​i/gcc/openmpi/include/ 用于 OpenSUSE Leap【参考方案6】:

Debian 似乎包含以下内容:

mpiCC.openmpi mpic++.openmpi mpicc.openmpi mpicxx.openmpi mpif77.openmpi mpif90.openmpi

我将为 mpic 等测试每个符号链接,看看这是否有助于启用 HDF5-openmpi 之类的找到 mpi.h。

让 Debian 通过他们的替代系统包含符号链接,它仍然无法找到 HDF5 openmpi 包和 H5public.h 标头中引用的 mpi.h 之间的正确路径。

【讨论】:

【参考方案7】:

在 Ubuntu 18.04 上我必须安装:

sudo apt install lam4-dev

【讨论】:

林中古。不要使用它。使用 Open-MPI 3+ 或 MPICH 3+。【参考方案8】:

在 Fedora 上:

dnf install openmpi-devel

【讨论】:

以上是关于致命错误:mpi.h:没有这样的文件或目录#include <mpi.h>的主要内容,如果未能解决你的问题,请参考以下文章

致命错误 C1083:无法打开包含文件:'io.h':没有这样的文件或目录

致命错误:glib.h:使用 vscode 和 mingw 时没有这样的文件或目录

致命错误 C1083:无法打开包含文件:'boost/regex.hpp':没有这样的文件或目录

致命错误:Python.h:没有这样的文件或目录

收到“致命错误 C1083:无法打开包含文件:'gxall.h':没有这样的文件或目录”[重复]

致命错误:sdl.h:没有这样的文件或目录