schwerwiegender Fehler: mpi.h: Keine solche Datei oder Verzeichnis #include

Lesezeit: 4 Minuten

Benutzeravatar von user2804865
Benutzer2804865

wenn ich mein script nur mit kompiliere

#include <mpi.h>

es sagt mir, dass es keine solche Datei oder dieses Verzeichnis gibt. Aber wenn ich den Pfad zu mpi.h als einfüge

#include "/usr/include/mpi/mpi.h"

(der Pfad ist korrekt) es gibt zurück:

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.

Weiß jemand, wie man das beheben kann?

  • Was ist dein Compiler und Betriebssystem?

    – Muradin

    13. November 2014 um 23:04 Uhr

  • g++ unter Linux. und funktioniert auch nicht.

    – Benutzer2804865

    13. November 2014 um 23:34 Uhr

  • Programme, die das Message Passing Interface verwenden, sollten mit etwas wie kompiliert werden mpicc main.c -o main oder mpiCC main.cpp -o main. Ist es Ihr Fall? Bezüglich der zweiten Meldung: Möglicherweise haben Sie zwei Implementierungen der MPI-Standards auf Ihrem Computer. Sie können versuchen, mehr zu erfahren, indem Sie tippen which mpicc, which mpirun, mpirun --version oder module avail. Die Implementierung (openmpi oder mpich2 oder …) des Compilerbefehls muss mit dem Befehl zum Ausführen des Programms identisch sein mpirun -np 2 main.

    – Francis

    13. November 2014 um 23:38 Uhr


Das Problem ist mit ziemlicher Sicherheit, dass Sie nicht die MPI-Compiler-Wrapper verwenden. Wann immer Sie ein MPI-Programm kompilieren, sollten Sie die MPI-Wrapper verwenden:

  • C – mpicc
  • C++ – mpiCC, mpicxx, mpic++
  • FORTRAN- mpifort, mpif77, mpif90

Diese Wrapper erledigen die ganze Drecksarbeit für Sie, um sicherzustellen, dass alle geeigneten Compiler-Flags, Bibliotheken, Include-Verzeichnisse, Bibliotheksverzeichnisse usw. enthalten sind, wenn Sie Ihr Programm kompilieren.

  • Das Rätsel liegt in der Tatsache, dass Openmpi keine MPI-Wrapper für mpicc, mpicxx usw. hat.

    – Marc J. Driftmeyer

    26. Dezember 2014 um 19:43 Uhr

  • Es mag einige Implementierungen geben, die sie nicht bereitstellen, aber Open MPI gehört nicht dazu. Das hat es auf jeden Fall zumindest mpicc und mpicxx und mpifortan.

    – Wesley Bland

    26. Dezember 2014 um 19:53 Uhr

  • kannst du erklären wie man das behebt? Ich versuche, jemandes Programm zu machen, und es gibt den Fehler im ursprünglichen Beitrag. es sucht nach mpi.h. Ich habe die API mit apt-get installiert. Bekomme immer noch den gleichen Fehler.

    – Benutzer391339

    28. Mai 2016 um 22:20 Uhr

  • Es wurden keine Informationen darüber gegeben, wie diese Wrapper zu verwenden sind; Hinzufügen zum Compiler like -mpiCCeinen Wrapper installieren und in die Quelldatei einfügen?

    – Frottee

    5. Oktober 2019 um 10:27 Uhr

  • @ user391339 und Romario Standardmäßig verwendet Ihre IDE cmake oder so, um die .cpp-Datei zu kompilieren, richtig? .. Stattdessen verwenden Sie den mpi-Wrapper (der einfach ein Befehl zum Kompilieren/Ausführen ist), um Ihr Programm zu kompilieren/auszuführen. Ein Beispiel wäre: $ mpic++ main.cpp und ein Beispiel zum Ausführen Ihres Programms wäre $ mpirun -np 2 a.out

    – Hasnaa Ibrahem

    15. November 2019 um 21:46 Uhr

Benutzeravatar von Gregory Alan Bolcer
Gregory Alan Bolcer

Auf meinem System fehlte mir nur das Linux-Paket.

sudo apt install libopenmpi-dev
pip install mpi4py

(Beispiel für etwas, das es verwendet, das ein guter Soforttest ist, um zu sehen, ob es erfolgreich war)

Erfolgreich.

Benutzeravatar von Bvacavar
Bvacavar

Sie können Folgendes ausführen:

$ mpicc -showme 

Ergebnis :

gcc -I/Users/<USER_NAME>/openmpi-2.0.1/include -L/Users/<USER_NAME>/openmpi-2.0.1/lib -lmp

Dieser Befehl zeigt Ihnen die notwendigen Bibliotheken zum Kompilieren von mpicc

Beispiel:

$ 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

Dieser Befehl generiert eine ausführbare Datei mit Ihrem Programm. Beispiel: Sie können Folgendes ausführen:

$ ./example

  • Schlagen Sie vor, die Wrapper zu verwenden, um einige Informationen zu extrahieren und sie dann erneut an die Wrapper zu übergeben?

    – Gilles Gouaillardet

    3. März 2018 um 15:32 Uhr

Auf meinem System Ubuntu 16.04. Ich installierte :

sudo apt install libopenmpi-dev

nachdem ich mpiCC zum Kompilieren verwendet habe und es funktioniert

Wie oben vorgeschlagen, die Aufnahme von

/usr/lib/openmpi/include 

im include-Pfad kümmert sich darum (in meinem Fall)

  • /usr/lib64/mpi/gcc/openmpi/include/ für OpenSUSE Leap

    – max

    3. November 2016 um 7:49 Uhr

Benutzeravatar von Marc J. Driftmeyer
Marc J. Driftmeyer

Debian scheint Folgendes zu enthalten:

  • mpiCC.openmpi
  • mpic++.openmpi
  • mpicc.openmpi
  • mpicxx.openmpi
  • mpif77.openmpi
  • mpif90.openmpi

Ich werde Symlinks von jedem für mpic usw. testen und sehen, ob das hilft, wenn HDF5-openmpi aktiviert ist, mpi.h zu finden.

Nehmen Sie das zurück Debian enthält Symlinks über sein alternatives System und es kann immer noch nicht die richtigen Pfade zwischen HDF5-Openmpi-Paketen und mpi.h finden, auf die im H5public.h-Header verwiesen wird.

  • /usr/lib64/mpi/gcc/openmpi/include/ für OpenSUSE Leap

    – max

    3. November 2016 um 7:49 Uhr

Benutzeravatar von Felix Crazzolara
Felix Crazzolara

Auf Ubuntu 18.04 musste ich installieren:

sudo apt install lam4-dev

  • Lam in der Antike. Verwenden Sie es nicht. Verwenden Sie Open-MPI 3+ oder MPICH 3+.

    – Jeff Hammond

    10. April 2021 um 4:28 Uhr

1410510cookie-checkschwerwiegender Fehler: mpi.h: Keine solche Datei oder Verzeichnis #include

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy