在编译一个基本的MPI程序的时候遇到了错误
程序如下:
名称为:Demo.cpp
#include <stdio.h>
#include <mpi.h>
int main(int argc, char** argv){
int rank;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
printf("Hello, world! I'm rank %d\n", rank);
MPI_Finalize();
}
我所用编译命令为:mpicc -o Demo Demo.cpp
然后就遇到了错误提示::undefined reference to `__gxx_personality_v0' .
经查阅资料与尝试,得知
1. * 编译 c++ 程序需要添加 -lstdc++ sample: gcc -lstdc++ -o test test.cpp,否则会报 "undefinedreference to '__gxx_personality_v0' " 错误
此处如果想用mpicc命令而不报错,那么就应该用: mpicc -lstdc++ -o Demo Demo.cpp 或者直接用mpicxx来编译即可
2. 用gcc命令编译C程序,用g++命令编译C++程序。
g++和gcc本质一样的,本质上还是gcc,我们实验室所有的c++程序都是用gcc编译的,一般的程序用gcc足够了。 对于 C++ 程序,编译的时候用 gcc 或者 g++ 都可以。但是在进行连接的时候最好用 g++,因为用 g++ 会自动进行 C++ 标准库的连接;用 gcc 连接 C++ 程序也可以,但是需要人为指定连接 C++ 标准库,否则就会出现undefined reference to `__gxx_personality_v/0' 之类的错误。
可见-lstdc++ 所对应的是标准C++库
3. 编译器是如何判断是C++程序还是C程序了,我初步判断是从*.cpp与*.c来判断。我来把原文件名改为Demo.c试试,结果果然不再报错。
4. 编译成功后还出现了另外一个错误,不过错误以前遇到过,好办,请参考以前的文章mpiexec_logon01: cannot connect to local mpd (/tmp/mpd2.console_ycai), 另外还可以参考该文章:mpirun mpd mpiexec
参考文章:点击打开链接