erreur fatale: mpi.h: Pas de fichier ou de répertoire #include
quand je compilerai mon script avec seulement
#include <mpi.h>
il me dit qu'il n'y a aucun fichier ou répertoire. Mais quand j'inclus le chemin vers le mpi.h
#include "/usr/include/mpi/mpi.h"
(le chemin est correct) il retourne:
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.
Quelqu'un sait comment réparer ça?
5 réponses
le problème est presque certainement que vous n'utilisez pas les wrappers du compilateur MPI. Chaque fois que vous compilez un programme MPI, vous devez utiliser les paquets MPI:
- C -
mpicc
- C++ -
mpiCC
,mpicxx
,mpic++
- FORTRAN -
mpifort
,mpif77
,mpif90
ces wrappers font tout le sale travail pour vous de s'assurer que tous les drapeaux de compilateur appropriés, les bibliothèques, inclure des répertoires, bibliothèque répertoires, etc. sont inclus lorsque vous compilez votre programme.
sur mon système, je manquais juste le paquet Linux.
sudo apt install libopenmpi-dev
pip install mpi4py
(exemple de quelque chose qui l'utilise c'est un bon moment de tester pour voir si il a réussi)
Réussi.
Comme suggéré ci-dessus, l'inclusion de
/usr/lib/openmpi/include
dans le chemin d'inclusion s'occupe de cela (dans mon cas)
Debian semble inclure ce qui suit:
- mpiCC.openmpi
- la société++.openmpi
- mpicc.openmpi
- mpicxx.openmpi
- mpif77.openmpi
- mpif90.openmpi
je vais tester des liens symboliques de chacun pour mpic, etc. et voir si cela aide les goûts de HDF5-openmpi permis de trouver mpi.h.
reprenons que Debian inclut des liens symboliques via leur système alternatif et qu'il ne trouve toujours pas les chemins appropriés entre les paquets HDF5 openmpi et mpi.h référencé dans le public H5.h en-tête.
Vous pouvez exécuter la commande:
$ mpicc -showme
résultat :
gcc -I/Users/<USER_NAME>/openmpi-2.0.1/include -L/Users/<USER_NAME>/openmpi-2.0.1/lib -lmp
cette commande vous montre les bibliothèques nécessaires pour compiler mpicc
Exemple:
$ 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
cette commande génère l'exécutable avec votre programme en exemple, vous pouvez exécuter:
$ ./example