我的MacOS上安装了OpenMPI和gcc。 OpenMPI的C语法可以完美运行。但是,始终无法识别OpenMPI的c ++语法。例如,void MPI::Init(int &argc, char**&argv);
行显示错误use of undeclared identifier 'MPI'
。
有人可以提供一些详细的程序来解决这个问题吗?
#include "mpi.h"
#include <stdio.h>
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
void MPI::Init(int &argc, char**&argv);
// Get the number of processes
int world_size;
MPI_Comm_size(MPI_COMM_WORLD, &world_size);
//int Comm::Get_size() const
// Get the rank of the process
int world_rank;
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
// Get the name of the processor
char processor_name[MPI_MAX_PROCESSOR_NAME];
int name_len;
MPI_Get_processor_name(processor_name, &name_len);
// Print off a hello world message
printf("Hello world from processor %s, rank %d out of %d processors\n",
processor_name, world_rank, world_size);
// Finalize the MPI environment. No more MPI calls can be made after this
MPI_Finalize();
}
答案 0 :(得分:2)
您的OpenMPI安装似乎是在没有C ++绑定的情况下构建的。虽然OpenMPI仍然包含C ++绑定,但它们实际上是removed from the standard years ago。您可能必须重建OpenMPI以启用C ++绑定,这取决于您首先安装它的方式。
由于它们不是标准的一部分,因此建议首先不要使用C ++绑定。 相反,最常见的建议是使用Boost.MPI。
不幸的是,Boost.MPI似乎不再积极开发(最后一个bug在2年前关闭),并且有一些非常讨厌的未解决问题, 所以我不推荐Boost.MPI。有一些很酷的MPI类型特征方法,但我不知道广泛接受/积极开发的包装器。
答案 1 :(得分:2)
在Mac OS X中使用自制软件安装open-mpi时我遇到了同样的问题(我是来自Debian / Ubuntu Linux的Mac OS X新手)。幸运的是,我解决了它。正如Zulan所说,你的open-mpi安装是在没有C ++绑定的情况下构建的。但是,我认为最好的解决方案是直接从源代码重建它。我直接从其主页下载.tar文件,如果你仔细观察,你会发现默认禁用了C ++绑定(在untar文件夹中执行以下操作):
$ ./configure -help
- enable-mpi-cxx启用C ++ MPI绑定(默认值:禁用)
所以,基本上我重建了open-mpi,直接添加了这个标志,如下所示:
$ ./configure --enable-mpi-cxx
然后,只需确保您知道安装它的位置(如果使用--prefix =或默认值)将其正确链接到您的makefile。
有关此问题的详细信息,请参阅此处:https://github.com/open-mpi/ompi/issues/3173。
答案 2 :(得分:2)
如果您使用自制程序安装OpenMPI,则需要先卸载它:
brew uninstall openmpi
然后重新安装它,启用C ++绑定:
brew install openmpi --with-cxx-bindings
有关选项的完整列表,请参阅brew info openmpi
。请注意,由于您未使用OpenMPI的默认版本,因此brew需要从源代码构建它而不是使用预编译的瓶子,因此安装时间会比平时长。