quand je compile mon script avec seulement
#include <mpi.h>
il me dit qu’il n’existe aucun fichier ou répertoire de ce type .
#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 ceci?
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 wrappers MPI:
mpicc
mpiCC
, mpicxx
, mpic++
mpifort
, mpif77
, mpif90
Ces wrappers effectuent tout le travail nécessaire pour vous assurer que tous les indicateurs, bibliothèques, répertoires d'inclusion, répertoires de bibliothèque, etc. appropriés du compilateur sont inclus lors de la compilation de votre programme.
Sur mon système, il me manquait juste le paquet Linux.
Sudo apt install libopenmpi-dev
pip install mpi4py
(exemple de quelque chose qui l'utilise, c'est un bon test instantané pour voir s'il a réussi)
A réussi.
Debian semble inclure les éléments suivants:
Je vais tester les liens symboliques de chacun pour mpic, etc., et voir si cela aide les goûts de HDF5-openmpi qui a permis de trouver mpi.h.
Reprenez cela, Debian inclut les liens symboliques via son système alternatif et elle ne trouve toujours pas les chemins appropriés entre les paquets HDF5 openmpi et mpi.h référencés dans l’en-tête H5public.h.
Comme suggéré ci-dessus, l'inclusion de
/usr/lib/openmpi/include
dans le chemin d'accès en prend soin (dans mon cas)
Sur mon système Ubuntu 16.04. J'ai installé :
Sudo apt install libopenmpi-dev
après avoir utilisé mpiCC pour compiler et cela fonctionne
Vous pouvez exécuter:
$ 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 un exécutable avec votre programme en exemple, vous pouvez exécuter:
$ ./example