Всегда получайте следующие ошибки при запуске команды 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();
^~~
Ваше приложение использует привязки 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
библиотека.
Я также сталкиваюсь с проблемой, но у меня нет привилегий 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