Фатальная ошибка: mpi.h: Нет такого файла или каталога #include <mpi.h>

когда я скомпилирую script только

#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.

Кто-нибудь знает, как это исправить?

Ответы

Ответ 1

Проблема почти наверняка заключается в том, что вы не используете обложек компилятора MPI. Всякий раз, когда вы компилируете программу MPI, вы должны использовать оболочки MPI:

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

Эти обертки выполняют всю грязную работу, чтобы убедиться, что все соответствующие флаги, библиотеки, каталоги, каталоги библиотек и т.д. включены во время компиляции вашей программы.

Ответ 2

В моей системе я просто отсутствовал в пакете Linux.

sudo apt install libopenmpi-dev
pip install mpi4py

(пример того, что использует его, что является хорошим мгновенным тестом, чтобы проверить, удалось ли это сделать)

преуспели.

Ответ 3

Как было предложено выше, включение

/usr/lib/openmpi/include 

в пути включения позаботится об этом (в моем случае)

Ответ 4

В Debian появляется следующее:

  • mpiCC.openmpi
  • КОМП ++. OpenMPI
  • mpicc.openmpi
  • mpicxx.openmpi
  • mpif77.openmpi
  • mpif90.openmpi

Я буду тестировать символические ссылки для mpic и т.д., и посмотреть, помогает ли это тому, как HDF5-openmpi разрешает найти mpi.h.

Возьмите это обратно. Debian включает символические ссылки через свою альтернативную систему и по-прежнему не может найти правильные пути между пакетами openmpi HDF5 и mpi.h, указанными в заголовке H5public.h.

Ответ 5

Вы можете выполнить:

$ 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

Ответ 6

На моей системе Ubuntu 16.04. Я установил:

sudo apt install libopenmpi-dev

после того как я использовал mpiCC для компиляции и он работает