在C++程序上使用mpicc链接失败
Linking fails using mpicc on C++ program
我运行的是Ubuntu 11.04 64位。我已经安装了OpenMPI。我正在尝试构建以下代码,这是Gropp/Lusk/Skjellum的《使用MPI》一书中测试问题的片段:
#include <math.h>
#include "mpi.h"
int main(int argc, char *argv[])
{
int size, rank;
MPI::Init(argc, argv);
size = MPI::COMM_WORLD.Get_size();
rank = MPI::COMM_WORLD.Get_rank();
MPI::Finalize();
return 0;
}
从终端,我可以使用mpicc包装器来检索以下信息,这些信息是我在机器上编译和链接所需的:
$ mpicc --showme:compile
-I/usr/lib/openmpi/include -I/usr/lib/openmpi/include/openmpi -pthread
$ mpicc --showme:link
-pthread -L/usr/lib/openmpi/lib -lmpi -lopen-rte -lopen-pal -ldl -Wl,--export-dynamic -lnsl -lutil -lm -ldl
我可以成功地编译代码。但是,链接失败。以下是我的编译器和链接器步骤:
make all
Building file: ../main.cpp
Invoking: GCC C++ Compiler
mpicc -I/usr/lib/openmpi/include -I/usr/lib/openmpi/include/openmpi -O0 -g3 -Wall -c -fmessage-length=0 -pthread -MMD -MP -MF"main.d" -MT"main.d" -o"main.o" "../main.cpp"
Finished building: ../main.cpp
Building target: test
Invoking: GCC C++ Linker
mpicc -L/usr/lib/openmpi/lib -pthread -Wl,--export-dynamic -o"test" ./main.o -lm -ldl -lmpi -lopen-rte -lopen-pal -lnsl -lutil
./main.o: In function `main':
/home/djunderw/ncsu/workspace/test/Debug/../main.cpp:20: undefined reference to `MPI::COMM_WORLD'
/home/djunderw/ncsu/workspace/test/Debug/../main.cpp:21: undefined reference to `MPI::COMM_WORLD'
./main.o: In function `__static_initialization_and_destruction_0':
/usr/include/c++/4.4/iostream:72: undefined reference to `std::ios_base::Init::Init()'
/usr/include/c++/4.4/iostream:72: undefined reference to `std::ios_base::Init::~Init()'
.......
我在上面使用了.......
来表示错误消息不断出现的事实——有很多错误消息,但我不认为它们都需要在这里显示。如果是,请询问,我会全部粘贴。
我怀疑我的链接器标志的顺序不正确另一个线程得出这样的结论:对MPI代码使用G++时出现链接错误。但如果是这样的话,我想不出是什么出了问题。
为什么我的链接失败
已解决:我将mpicc
更改为mpic++
,现在它可以工作了。
您的文件是.c文件还是.cpp文件。问题是mpicc是c编译器,mpic++是c++编译器,所以如果你的程序是c程序,我认为用c++编译器编译它是不推荐的。
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- CMake-按正确顺序将项目与C运行时对象文件链接
- 从链接列表c++中删除一个项目
- 有根的二进制搜索树.保留与其父级的链接
- 读取文件的最后一行并输入到链接列表时出错
- 静态数据成员的问题-修复链接错误会导致编译器错误
- node-gyp 在 macOS 上未正确链接库
- 基于boost的程序的静态链接——zlib问题
- 无法链接 CMake 中的本地库
- 内联函数中具有内部链接的全局变量
- 链接阶段在Ubuntu上失败,但在MacOS上失败
- 使用gcc从静态链接的文件中查找可选符号
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 下面是我为检测链接列表中的循环而制作的代码
- 有了gcc,是否可以链接库,但前提是它存在
- 使用C链接在函数内部创建C++模板
- Visual Studio mkl_link_tool.exe链接错误
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- 在C++程序上使用mpicc链接失败