Open MPI的“Hello, World!”无法编译

11

这是一个简单的MPI“Hello, World!”程序。

#include <stdio.h>
#include <mpi.h>

int main(int argc, char **argv)
{
   int size, rank;
   MPI_Init(&argc, &argv);
   MPI_Comm_size(MPI_COMM_WORLD, &size);
   MPI_Comm_rank(MPI_COMM_WORLD, &rank);
   printf("SIZE = %d RANK = %d\n",size,rank);
   MPI_Finalize();   
   return(0);
}

然而,它似乎无法编译:

Undefined                       first referenced
 symbol                             in file
MPI::Datatype::Free()               /var/tmp//ccE6aG2w.o
MPI::Win::Free()                    /var/tmp//ccE6aG2w.o
MPI::Comm::Comm()                   /var/tmp//ccE6aG2w.o
ld: fatal: symbol referencing errors. No output written to main
collect2: ld returned 1 exit status

我已经谷歌了很多,看了数以千计的邮件列表。它们都说libmpi_cxx没有链接。但它在编译器标志中。

这里是--showme数据:

mpic++ --showme:compile
-I/usr/openmpi/ompi-1.5/include -I/usr/openmpi/ompi-1.5/include/openmpi

mpic++ --showme:link
-R/opt/mx/lib -R/usr/openmpi/ompi-1.5/lib -L/usr/openmpi/ompi-1.5/lib -lmpi -lopen-rte -lopen-pal -lnsl -lrt -lm -ldl -lsocket -lmpi_cxx

我的编译器是g++。


1
你是否正确链接了(正确的)库? - Mark Garcia
@MarkGarcia 你说的“proper linking”是什么意思? - efpies
2
你能展示一下你用来编译和链接这段代码的完整命令行吗?根据你的代码,它应该能够使用mpicc进行编译和链接,因为它没有引用C++绑定。 - Phil Miller
我认为这是一个环境变量问题。 - pyCthon
3个回答

13

只需将mpi.h头文件置于所有头文件之上,有时会导致编译问题。

我不确定你是如何执行代码的。正在编译。

mpic++ your_code_file.c

执行

mpirun -np <no. of Processors> ./a.out

2
一些注意事项:
请注意,Open MPI 1.5版本已经过时。请升级到Open MPI 1.6.x系列的最新版本(目前是1.6.3)。但请注意,www.open-mpi.org网站目前正在进行计划中的年底维护,直到2012年12月28日星期四稍后才能恢复访问。
我很好奇:为什么您要使用mpic++编译C程序?您只需要使用mpicc - C MPI包装器编译器即可避免这个问题。然而,如果您将这个简单的C hello world程序作为一个简单的示例,并且您实际的目标是编译一个C++ MPI程序,那么mpic++是正确的尝试包装器(即使是一个简单的C程序)。如果是这种情况,那么您的C++编译器与Open MPI编译/安装的C++编译器之间可能存在某种不兼容性/配置错误。
从您的mpic++ --showme输出来看,它似乎是一种Open MPI的软件包分发方式,-R默认情况下不会出现在标志中。您从哪里获取了这个Open MPI安装?很可能它与您的g++安装不完全兼容(例如,如果它是使用不同版本的g++编译的)。
话虽如此,您的mpic++ --showme输出也很奇怪,因为它将-lmpi_cxx列在行的末尾。它应该在-lmpi的左边,而不是右边。我不确定您的安装是如何出现这种问题的,但这也是可能的原因之一。
总结一下,我的答案是:
1. 请尝试升级Open MPI并查看问题是否解决。 2. 仔细检查您的Open MPI安装是否与您的系统兼容。

我很久以前遇到过这个问题,但现在不是这种情况了,但我想回答第三个问题。你从哪里获取这个Open MPI安装包? 我使用的是Mac OS X,并尝试避免手动配置和安装软件。因此,我使用MacPorts安装了OpenMPI库(以及gcc/g++)。它似乎会引起问题,所以也许手动安装OpenMPI是一个好决定(至少对于2012年末来说是这样)。希望能帮到某些人。 - efpies

1

重点是在没有sudo权限的情况下在远程服务器上使用openmpi。非常感谢提供链接,也许我可以因为MacPorts的问题在我的Mac Mini上使用这个IDE。 - efpies

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接