打开MPI“Hello,World!”没有编译

时间:2012-12-25 06:02:46

标签: c++ g++ mpi

这是一个简单的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 ++。

3 个答案:

答案 0 :(得分:10)

只需将 mpi.h 头文件放在所有头文件上方 有时会导致编译问题

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

mpic++ your_code_file.c

执行

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

答案 1 :(得分:1)

在“Eclipse for Parallel Application Developers”IDE中编译openmpi和mpi程序也更加轻松和灵活。

http://www.eclipse.org/downloads/packages/eclipse-parallel-application-developers/junosr1

答案 2 :(得分:1)

一些注意事项:

  1. 请注意,Open MPI 1.5很古老。请升级到Open MPI 1.6.x系列中的最新版本(目前为1.6.3,但请注意www.open-mpi.org网站目前正在进行计划的年终维护,不会再回来直到今天晚些时候,2012年12月28日,星期四)。

  2. 我很好奇:为什么要用mpic ++编译C程序?您只需要使用mpicc - C MPI包装器编译器。这肯定会避免你的问题。但是,如果您使用这个小的C hello world程序作为一个简单示例,并且您的实际目标是编译C ++ MPI程序,那么mpic ++是正确的包装器(即使使用简单的C程序)。如果是这种情况,那么您的C ++编译器与编译/安装Open MPI的C ++编译器之间存在某种不兼容/错误配置。

  3. 查看你的mpic ++ --showme输出,看起来你有某种Open MPI的包分发 - 例如,默认情况下-R没有放入标志中。你在哪里获得这个Open MPI安装?它很可能与你的g ++安装(完全)兼容(例如,如果它是用不同版本的g ++编译的)。

  4. 话虽如此,你的mpic ++ --showme输出也很奇怪,因为它在行的 end 列出了-lmpi_cxx。它应该是-lmpi的 left ,而不是它的 right 。我没有说明你的装置是如何被塞的那样,但这是另一个可能的原因。

  5. 总而言之,我的回答是:

    1. 请尝试升级Open MPI并查看问题是否消失。
    2. 仔细检查您的Open MPI安装是否与您的系统兼容。