1
我的代码是如此简单:链接错误
#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();
}
我第一编译到对象文件:
g++ -c src/mpitest.cpp -o src/mpitest.o
然后,我可以很容易地使用mpicxx:
mpicxx src/mpitest.o -o mpi
但我想用g ++代替,因为它对automake来说比较容易,所以我试过了:
mpicxx src/mpitest.o -o mpi -show
它打印出:
g++ src/mpitest.o -o mpi -I/usr/local/include -L/usr/local/lib -L/usr/local/lib -lmpichcxx -lmpich -lopa -lpthread -lrt
是的,这命令实际上成功地做同样的事情。但是,如果我试图将其更改为(我只是改变了目标文件,并输出到年底):
g++ -I/usr/local/include -L/usr/local/lib -L/usr/local/lib -lmpichcxx -lmpich -lopa -lpthread -lrt src/mpitest.o -o mpi
这是当它增加了LDFLAGS的automake做什么,在G ++开始抱怨......
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 ++ --version G ++(Ubuntu的4.4.3-4ubuntu5)4.4.3 MPI是MVAPICH2
是的,订单确实很重要!我只是在这里找到它:http://www.network-theory.co.uk/docs/gccintro/gccintro_18.html – w00d