OpenMPI:错误:'MPI'尚未声明

问题描述 投票:2回答:2

运行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();
     ^~~
c++ openmpi mpic++
2个回答
3
投票

您的应用程序正在使用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库。


0
投票

我也遇到了问题,但我没有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

© www.soinside.com 2019 - 2024. All rights reserved.