首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将G++用于MPI代码时出现链接错误

将G++用于MPI代码时出现链接错误
EN

Stack Overflow用户
提问于 2011-06-23 16:35:07
回答 1查看 5K关注 0票数 1

我的代码就像下面这样简单:

代码语言:javascript
复制
#include <mpi.h>
int main(int argc, char**args) {
    MPI_Init(&argc, &args);
    int mpiSize;
    int mpiRank;
    MPI_Comm_size(MPI_COMM_WORLD, &mpiSize);
    MPI_Comm_rank(MPI_COMM_WORLD, &mpiRank);
    MPI_Finalize();
}

我首先把它编译成目标文件:

代码语言:javascript
复制
g++ -c src/mpitest.cpp -o src/mpitest.o

然后我可以很容易地使用mpicxx:

代码语言:javascript
复制
mpicxx src/mpitest.o -o mpi

但我想用g++代替,因为它对automake来说更容易,所以我试了一下:

代码语言:javascript
复制
mpicxx src/mpitest.o -o mpi -show

它会打印出来:

代码语言:javascript
复制
g++ src/mpitest.o -o mpi -I/usr/local/include -L/usr/local/lib -L/usr/local/lib -lmpichcxx -lmpich -lopa -lpthread -lrt

是的,这个命令实际上成功地做了同样的事情。但是,如果我试图将其更改为(我只更改对象文件并输出到末尾):

代码语言:javascript
复制
g++ -I/usr/local/include -L/usr/local/lib -L/usr/local/lib -lmpichcxx -lmpich -lopa -lpthread -lrt src/mpitest.o -o mpi

这就是automake在添加LDFLAGS时所做的事情,g++开始抱怨...

代码语言:javascript
复制
src/mpitest.o: In function `main':
..src/mpitest.cpp:5: undefined reference to `MPI_Init'
../src/mpitest.cpp:8: undefined reference to `MPI_Comm_size'
../src/mpitest.cpp:9: undefined reference to `MPI_Comm_rank'
../src/mpitest.cpp:10: undefined reference to `MPI_Finalize'
collect2: ld returned 1 exit status

g++会发生什么?我搞不懂。请给我开导一下。为什么这里的顺序很重要呢?从一开始就做我想做的事情的正确方法是什么?

非常感谢

p/s : g++ --版本g++ (Ubuntu4.4.3-4ubuntu5)4.4.3MPI is mvapich2

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-23 16:50:40

我真的不记得了,也许从版本4开始,与-l链接的库必须在所有源文件和目标文件之后传递。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6451340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档