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?

24
demandé sur Wesley Bland 2014-11-14 02:00:44

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.

25
répondu Wesley Bland 2014-11-14 02:09:44

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.

5
répondu Gregory Alan Bolcer 2017-08-24 18:43:19

Comme suggéré ci-dessus, l'inclusion de

/usr/lib/openmpi/include 

dans le chemin d'inclusion s'occupe de cela (dans mon cas)

3
répondu jeremy_rutman 2016-07-17 13:22:56

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.

1
répondu Marc J. Driftmeyer 2014-12-26 20:09:26

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
0
répondu Bvacavar 2018-03-03 12:32:59