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

use*_*865 35 c c++ mpi openmpi

当我只编译脚本时

#include <mpi.h>
Run Code Online (Sandbox Code Playgroud)

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

#include "/usr/include/mpi/mpi.h"
Run Code Online (Sandbox Code Playgroud)

(路径是正确的)它返回:

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.
Run Code Online (Sandbox Code Playgroud)

有人知道怎么修这个东西吗?

Wes*_*and 32

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

  • C - mpicc
  • C++ - ,,mpiCCmpicxxmpic++
  • FORTRAN - ,,mpifortmpif77mpif90

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

  • 你能解释一下如何解决这个问题吗?我正在尝试制作一个人的程序,它在原始帖子中给出了错误.它正在寻找mpi.h. 我用apt-get安装了api.仍然得到相同的错误. (4认同)
  • 没有给出如何使用这些包装器的信息;将它们添加到编译器中,例如“-mpiCC”,安装包装器并将其包含在源文件中? (3认同)

Gre*_*cer 11

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

sudo apt install libopenmpi-dev
pip install mpi4py
Run Code Online (Sandbox Code Playgroud)

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

Succeded.


小智 6

你可以执行:

$ mpicc -showme 
Run Code Online (Sandbox Code Playgroud)

结果 :

gcc -I/Users/<USER_NAME>/openmpi-2.0.1/include -L/Users/<USER_NAME>/openmpi-2.0.1/lib -lmp
Run Code Online (Sandbox Code Playgroud)

此命令显示编译 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
Run Code Online (Sandbox Code Playgroud)

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

$ ./example
Run Code Online (Sandbox Code Playgroud)


jer*_*man 5

正如上面所建议的,包括

/usr/lib/openmpi/include 
Run Code Online (Sandbox Code Playgroud)

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


小智 5

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

sudo apt install libopenmpi-dev
Run Code Online (Sandbox Code Playgroud)

在我使用 mpiCC 进行编译后,它可以工作了