【问题标题】:OpenMPI: error: ‘MPI’ has not been declaredOpenMPI:错误:尚未声明“MPI”
【发布时间】:2017-09-25 16:05:58
【问题描述】:

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

【问题讨论】:

  • 为了帮助您查看代码,而不仅仅是您在此处放置的几行代码。
  • 此外,了解您使用的操作系统、OpenMPI 版本也会有所帮助。
  • 我试过3个不同的版本,都是优麒麟17.04的2或更高版本。
  • 因为它根本没有帮助,我尝试安装一个新的“Ubuntu GNOM 17.04”操作系统和“openmpi-2.1.1”。但是,遵循常规安装过程然后启用“--enable-mpi-cxx”并没有帮助。因此,在安装并启用“--enable-mpi-cxx”后,我使用“sudo make install”命令重建它,它工作正常。

标签: c++ openmpi mpic++


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-21
      • 1970-01-01
      • 1970-01-01
      • 2012-11-24
      • 2016-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多