Фатальная ошибка: 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 для компиляции и он работает