不能与MPI一起使用cout

时间:2014-08-02 14:12:07

标签: c++ mpi

我尝试用MPI运行一个非常基本的程序。每当我使用cout语句时,使用mpicc创建目标文件时出错。但是,如果我用printf语句替换它,一切都很完美。

#include <iostream>
#include <cstdlib>
#include "mpi.h"

int main(int argc, char* argv[]) {
  // Initialize the MPI environment.
  MPI_Init(NULL,NULL);

  // Get the number of processes
  int world_size;
  MPI_Comm_size(MPI_COMM_WORLD, &world_size);

  // 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("Processor %s, rank %d out of %d processors\n",
  //       processor_name, world_rank, world_size);
  std::cout<<"Processor "<< processor_name<<" , rank "<<world_rank<<" out of  processors "<<world_size<<std::endl;        

  // Finalize the MPI environment. No more MPI calls can be made after this
  MPI_Finalize();
}

以前有人遇到过这个问题吗?

2 个答案:

答案 0 :(得分:2)

正如我在评论中已经指出的那样,使用mpic ++(或者在你的平台上调用C ++包装器),而不是mpicc。


使用我的本地mpic ++。mpich2,Q中的代码编译并链接。


mpicc的问题在于链接器阶段,它不会自动链接到libstdc ++,libc ++或您平台上的任何C ++ std lib,因此链接器无法解析std :: cout和其他符号。

答案 1 :(得分:1)

除了答案之外。或者如果您在Windows中工作,使用VS 2010,它拥有自己的mpi调试集群,并且可以使用C代码或C ++代码完美地工作。使用mpi会让人头疼。