c++ - 在 C++ 程序上使用 mpicc 链接失败

标签 c++ compiler-construction linker mpi flags

我正在运行 Ubuntu 11.04 64 位。我已经安装了 OpenMPI。我正在尝试构建以下代码,它是 Gropp/Lusk/Skjellum 的“Using 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()'
.......

我在上面使用 ....... 来表示错误消息不断出现这一事实——它们有很多,但我不认为它们是都需要在这里展示。如果是,请询问,我会全部粘贴。

我怀疑我的链接器标志的顺序不正确。另一个线程得出了这个结论:Link errors while using G++ for MPI code .但如果是这样,我无法弄清楚什么地方出了问题。

为什么我的链接失败了?

最佳答案

已解决:我将 mpicc 更改为 mpic++,现在它可以工作了。

关于c++ - 在 C++ 程序上使用 mpicc 链接失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13756173/

相关文章:

C++ 2 DLL 相互使用

java - 官方Java编译器

php - 构建 libphp5.so 以嵌入 C/C++

c++ - inline关键字的两种不同效果有什么关系?

c++ - 标准 vector 之上的 C++11 包装器类

assembly - 既然有了编译器,为什么还需要汇编器呢?

java - 如何在 Java/Swing 中实现内置编译器?

visual-studio-2008 - Visual Studio 2008 中的 LNK1210

c++ - 默认的Visual Studio C++控制台应用程序有409个错误

c++ - 在 C++ 中对这些独立但相关的序列进行排序的简洁方法是什么?