致命错误: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 main
或mpiCC main.cpp -o main
之类的东西来编译。是你的情况吗?关于第二条消息:您的计算机上可能有两种 MPI 标准的实现。您可以通过输入which mpicc
、which mpirun
、mpirun --version
或module 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 不是其中之一。它肯定至少有mpicc
和mpicxx
和mpifortan
。
你能解释一下如何解决这个问题吗?我正在尝试制作某人的程序,它在原始帖子中给出了错误。它正在寻找 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/mpi/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':没有这样的文件或目录