OpenMPI: ошибка: «MPI» не был объявлен

Всегда получайте следующие ошибки при запуске команды OpenMPI «mpicxx hello_cxx.cc -o hello»

hello_cxx.cc: In function ‘int main(int, char**)’:
hello_cxx.cc:25:5: error: ‘MPI’ has not been declared
MPI::Init();
^~~ hello_cxx.cc:26:12: error: ‘MPI’ has not been declared
rank = MPI::COMM_WORLD.Get_rank();
^~~ hello_cxx.cc:27:12: error: ‘MPI’ has not been declared
size = MPI::COMM_WORLD.Get_size();
^~~ hello_cxx.cc:31:5: error: ‘MPI’ has not been declared
MPI::Finalize();
^~~

1

Решение

Ваше приложение использует привязки MPI C ++.
Имейте в виду, что привязки C ++ были удалены из стандарта MPI.

С точки зрения Open MPI, привязки C ++ все еще здесь, но они больше не создаются по умолчанию, так как Open MPI 2.0.0,

Поэтому, если вы используете Open MPI 2.0.0 или более позднюю версию, вам сначала нужно убедиться, что привязки C ++ созданы.
Если нет, вам нужно пересобрать Open MPI и настроить с --enable-mpi-cxx вариант.

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

1

Другие решения

Я также сталкиваюсь с проблемой, но у меня нет привилегий root.
Как упоминалось в предыдущем ответе, Open MPI 2.0.0 изменил режим сборки. Так что вам просто нужно изменить грамматику.

Я встречаю ошибку:

ошибка: «MPI» не был объявлен

mpifile = MPI::FILE_NULL;

Из API openmp 2.0:

http://mpi-forum.org/docs/mpi-2.0/mpi-20-html/node217.htm#Node217

Я считаю, что новый дескриптор ошибки — MPI_FILE_NULL. Я изменяю его прямо в моем коде, и тогда он работает.

Следующая ссылка об устаревшей версии MPI-2.2:

http://mpi-forum.org/docs/mpi-2.2/mpi22-report/node328.htm#Node328

0

По вопросам рекламы [email protected]