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

fatal error: mpi.h: No such file or directory #include <mpi.h>

提问人:user2804865 提问时间:11/14/2014 最后编辑:Wesley Blanduser2804865 更新时间:5/4/2023 访问量:206400

问:

当我仅用

#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.

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

C++ C MPI OpenMPI

评论

0赞 muradin 11/14/2014
你们的编译器和操作系统是什么?
0赞 user2804865 11/14/2014
Linux 上的 G++。<mpi/mpi.h> 也不起作用。
1赞 francis 11/14/2014
使用消息传递接口的程序应使用类似 或 .是你的情况吗?关于第二条消息:您的计算机上可能有两个 MPI 标准的实现。您可以尝试通过键入 、 或 来了解更多信息。编译器命令的实现(openmpi 或 mpich2 或...)必须与执行程序的命令相同。mpicc main.c -o mainmpiCC main.cpp -o mainwhich mpiccwhich mpirunmpirun --versionmodule availmpirun -np 2 main

答:

53赞 Wesley Bland 11/14/2014 #1

几乎可以肯定,问题在于您没有使用 MPI 编译器包装器。每当编译 MPI 程序时,都应该使用 MPI 包装器:

  • E kmpicc
  • C++-mpiCCmpicxxmpic++
  • 福特兰 - , ,mpifortmpif77mpif90

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

评论

1赞 Marc J. Driftmeyer 12/27/2014
难题在于 openmpi 没有用于 mpicc、mpicxx 等的 MPI 包装器。
1赞 Wesley Bland 12/27/2014
可能有些实现不提供它们,但 Open MPI 不是其中之一。它肯定至少有 和 和 .mpiccmpicxxmpifortan
7赞 user391339 5/29/2016
你能解释一下如何解决这个问题吗?我正在尝试制作某人的程序,但它在原始帖子中给出了错误。 它正在寻找 mpi.h。我使用 apt-get 安装了 api。仍然得到同样的错误。
3赞 Terry 10/5/2019
没有提供有关如何使用这些包装器的信息;将它们添加到编译器中,例如安装包装器并将其包含在源文件中?-mpiCC
1赞 Hasnaa Ibraheem 11/16/2019
@user391339和罗马里奥 默认情况下,您的 IDE 使用 cmake 左右来编译 .cpp 文件,对吧?..相反,您将使用 mpi 包装器(它只是一个编译/执行命令)来编译/执行您的程序。一个例子是:$ mpic++ main.cpp,运行程序的示例是 $ mpirun -np 2 a.out
3赞 Marc J. Driftmeyer 12/27/2014 #2

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 之间的正确路径。

5赞 jeremy_rutman 7/17/2016 #3

如上所述,包括

/usr/lib/openmpi/include 

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

评论

0赞 Max 11/3/2016
/usr/lib64/mpi/gcc/openmpi/include/ 用于 OpenSUSE Leap
53赞 Gregory Alan Bolcer 8/25/2017 #4

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

sudo apt install libopenmpi-dev
pip install mpi4py

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

成功了。

评论

0赞 user30850 7/6/2023
如果您在构建 lammps 时遇到此错误,此解决方案的第一行也将起作用: $ cmake ../cmake -- 在 /home/name/lammps-23Jun2022/build/CMakeFiles/CMakeScratch/TryCompile-Iqf2dm/CMakeLists.txt 中对基于品牌的构建系统自动生成的文件运行检查 CMake 错误:导入的目标“MPI::MPI_CXX”在其INTERFACE_INCLUDE_DIRECTORIES中包含不存在的路径“/usr/lib/x86_64-linux-gnu/openmpi/include”。
14赞 Bvacavar 3/3/2018 #5

您可以执行:

$ 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

评论

1赞 Gilles Gouaillardet 3/3/2018
您是否建议使用包装器来提取一些信息,然后再次将其传递给包装器?
7赞 user7484492 1/9/2019 #6

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

sudo apt install libopenmpi-dev

在我使用 mpiCC 编译并且它可以工作之后

1赞 Hung Tran 12/26/2019 #7

在 Fedora 上:

dnf install openmpi-devel
2赞 Felix Crazzolara 4/7/2021 #8

在 Ubuntu 18.04 上,我必须安装:

sudo apt install lam4-dev

评论

0赞 Jeff Hammond 4/10/2021
Lam 在古代。不要使用它。使用 Open-MPI 3+ 或 MPICH 3+。
0赞 yyFred 3/16/2022 #9

在 Mac 12.2 上,我安装了 .头文件位于 下。brew install openmpi/opt/homebrew/Cellar/open-mpi/x.x.x/include

1赞 Carlos Noé 5/3/2022 #10

安装 MPI 后:

$ sudo apt 安装 mpich

查看库的安装位置,每种情况都不同:

$ mpicc -显示

就我而言:(Ubuntu 20.0)

并添加...

#include </usr/lib/x86_64-linux-gnu/openmpi/include/openmpi>

:-)

1赞 jindalab 5/4/2023 #11

在 Ubuntu 20.04 上,这对我有用:

apt -y install lam-runtime