我尝试用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();
}
以前有人遇到过这个问题吗?
答案 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会让人头疼。