我正在尝试本地编译使用openmpi(1.6.3)的软件, 但是我收到了这个错误:
restraint_camshift2.o :(。toc + 0x98):未定义引用 `ompi_mpi_cxx_op_intercept'
restraint_camshift2.o:在功能上 `Intracomm':
/home/users/didymos/openmpi-1.6.3/include/openmpi/ompi/mpi/cxx/intracomm.h:25: 对'MPI :: Comm :: Comm()'
的未定义引用/home/users/didymos/openmpi-1.6.3/include/openmpi/ompi/mpi/cxx/intracomm.h:25: 未明确引用
MPI::Comm::Comm()' restraint_camshift2.o: In function
Intracomm':/home/users/didymos/openmpi-1.6.3/include/openmpi/ompi/mpi/cxx/intracomm_inln.h:23: 未明确引用
MPI::Comm::Comm()' restraint_camshift2.o: In function
Intracomm':/home/users/didymos/openmpi-1.6.3/include/openmpi/ompi/mpi/cxx/intracomm.h:25: 对'MPI :: Comm :: Comm()'
的未定义引用/home/users/didymos/openmpi-1.6.3/include/openmpi/ompi/mpi/cxx/intracomm.h:25: 对'MPI :: Comm :: Comm()'
的未定义引用restraint_camshift2.o:/home/users/didymos/openmpi-1.6.3/include/openmpi/ompi/mpi/cxx/intracomm.h:25: 更多未定义的对“MPI :: Comm :: Comm()”的引用如下 restraint_camshift2.o :( data.rel.ro._ZTVN3MPI3WinE [_ZTVN3MPI3WinE] + 0x48):
对“MPI :: Win :: Free()”的未定义引用 restraint_camshift2.o :( data.rel.ro._ZTVN3MPI8DatatypeE [_ZTVN3MPI8DatatypeE] + 0x78):
未定义引用`MPI :: Datatype :: Free()'collect2:error:ld
返回1退出状态make [3]: * [mdrun]错误1 make [3]:离开
目录`/home/users/didymos/src/gromacs-4.5.5/src/kernel'make [2]: * [all-recursive]错误1
make [2]:离开目录`/home/users/didymos/src/gromacs-4.5.5/src'
make [1]: * [all]错误2
make [1]:离开目录`/home/users/didymos/src/gromacs-4.5.5/src'
make: * [all-recursive]错误1
我正在使用gcc 4.7.3 任何想法或建议? 谢谢! 最好,
托梅克
答案 0 :(得分:7)
看起来您没有链接到正确的库。当您为MPI编译代码时(无论是Open MPI,MPICH还是其他任何实现),您需要使用MPI编译器包装器来编译而不是直接编译gcc。
您需要说gcc myprog.c
,而不是说mpicc myprog.c
。
或者,与此应用程序的情况一样,将g++ myprog.c
更改为mpic++ myprog.c
。
在幕后,MPI将调用GCC(或您告诉它使用的任何其他编译器)来进行实际编译,但它还将添加所有相应的库,编译器标志以及您需要的任何其他内容。
答案 1 :(得分:0)
用户在这里发布了同样的问题:
http://www.open-mpi.org/community/lists/users/2013/07/22296.php
邮件列表上发布的解决方案是:使用mpiCC(或mpic ++),而不是mpicc。