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

时间:2017-09-25 16:05:59

标签: c++ openmpi mpic++

运行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 个答案:

答案 0 :(得分: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库。

答案 1 :(得分: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