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