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

当我只编译脚本时

#include  

它告诉我没有这样的文件或目录。 但是当我包含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++
  • FORTRAN – mpifortmpif77mpif90

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

在我的系统上,我只是错过了Linux软件包。

 sudo apt install libopenmpi-dev pip install mpi4py 

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

Succeded。

如上所述,包含

 /usr/lib/openmpi/include 

在include路径中处理这个问题(在我的例子中)

Debian似乎包括以下内容:

  • mpiCC.openmpi
  • MPIC ++。了openmpi
  • mpicc.openmpi
  • mpicxx.openmpi
  • mpif77.openmpi
  • mpif90.openmpi

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

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

你可以执行:

 $ mpicc -showme 

结果:

 gcc -I/Users//openmpi-2.0.1/include -L/Users//openmpi-2.0.1/lib -lmp 

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

例:

 $ mpicc -g -I/Users//openmpi-2.0.1/include -o [nameExec] [objetcs.o...] [program.c] -lm $ mpicc -g -I/Users//openmpi-2.0.1/include -o example file_object.o my_program.c otherlib.o -lm 

此命令在您的程序中生成可执行文件,您可以执行:

 $ ./example