提问人:user2804865 提问时间:11/14/2014 最后编辑:Wesley Blanduser2804865 更新时间:5/4/2023 访问量:206400
致命错误:mpi.h:没有这样的文件或目录 #include < mpi.h>
fatal error: mpi.h: No such file or directory #include <mpi.h>
问:
当我仅用
#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 包装器:
- E k
mpicc
- C++-
mpiCC
mpicxx
mpic++
- 福特兰 - , ,
mpifort
mpif77
mpif90
这些包装器为您完成所有肮脏的工作,以确保在编译程序时包含所有适当的编译器标志、库、包含目录、库目录等。
评论
mpicc
mpicxx
mpifortan
-mpiCC
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 之间的正确路径。
如上所述,包括
/usr/lib/openmpi/include
在包含路径中处理这个问题(在我的情况下)
评论
在我的系统上,我只是缺少 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 编译并且它可以工作之后
在 Fedora 上:
dnf install openmpi-devel
在 Ubuntu 18.04 上,我必须安装:
sudo apt install lam4-dev
评论
在 Mac 12.2 上,我安装了 .头文件位于 下。brew install openmpi
/opt/homebrew/Cellar/open-mpi/x.x.x/include
安装 MPI 后:
$ sudo apt 安装 mpich
查看库的安装位置,每种情况都不同:
$ mpicc -显示
就我而言:(Ubuntu 20.0)
并添加...
#include </usr/lib/x86_64-linux-gnu/openmpi/include/openmpi>
:-)
在 Ubuntu 20.04 上,这对我有用:
apt -y install lam-runtime
评论
mpicc main.c -o main
mpiCC main.cpp -o main
which mpicc
which mpirun
mpirun --version
module avail
mpirun -np 2 main