运行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;
来自openmp 2.0 api:
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