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

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

本文关键字:mpi #include gt lt 文件 致命错误      更新时间:2023-10-16

当我编译我的脚本时

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

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

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

  • C - mpicc
  • C++ - mpiCCmpicxxmpic++
  • 福特兰 - mpifortmpif77mpif90

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

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

sudo apt install libopenmpi-dev
pip install mpi4py

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

成功了。

您可以执行:

$ 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

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

sudo apt install libopenmpi-dev

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

之后

如上所述,包含

/usr/lib/openmpi/include 

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

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

在 Ubuntu 18.04 上,我必须安装:

sudo apt install lam4-dev

在 Fedora 上:

dnf install openmpi-devel

在 Ubuntu 20.04 上,这对我有用:

apt -y install lam-runtime

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

一旦安装了 MPI:

$ sudo apt install mpich

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

$ mpicc -show

就我而言:(Ubuntu 20.0)

并添加...

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

:-)