3

运行 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();
     ^~~
4

2 回答 2

4

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

于 2017-09-26T00:29:45.073 回答
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

于 2017-12-22T05:07:31.343 回答