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:

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

Другие вопросы по тегам