3

我正在尝试本地编译使用 openmpi (1.6.3) 的软件,但出现此错误:

克制凸轮移位2.o:(.toc + 0x98):未定义对“ompi_mpi_cxx_op_intercept”的引用

克制_camshift2.o:在函数“内部通信”中:

/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 functionIntracomm 的引用:

/home/users/didymos/openmpi-1.6.3/include/openmpi/ompi/mpi/cxx/intracomm_inln.h:23:未定义对MPI::Comm::Comm()' restraint_camshift2.o: In functionIntracomm 的引用:

/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()”的引用

resume_camshift2.o:/home/users/didymos/openmpi-1.6.3/include/openmpi/ompi/mpi/cxx/intracomm.h:25: 更多未定义的对“MPI::Comm::Comm()”的引用遵循约束_camshift2 .o:(.data.rel.ro._ZTVN3MPI3WinE[_ZTVN3MPI3WinE]+0x48):

未定义对 `MPI::Win::Free()' 的引用

未定义对“MPI::Datatype::Free()”的引用 collect2:错误:ld

返回 1 退出状态 make[3]: * [mdrun] 错误 1 ​​make[3]: Leaving

目录 `/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 有什么想法或建议吗?谢谢!最好的,

托梅克

4

2 回答 2

10

看起来您没有链接到正确的库。当您为 MPI 编译代码时(无论是 Open MPI、MPICH 还是任何其他实现),您需要使用 MPI 编译器包装器进行编译,而不是直接使用 gcc。

与其说,不如gcc myprog.cmpicc myprog.c。或者,与此应用程序一样,更改g++ myprog.cmpic++ myprog.c.

在后台,MPI 将调用 GCC(或您告诉它使用的任何其他编译器)来进行实际编译,但它也会添加所有适当的库、编译器标志以及您需要的任何其他内容。

于 2013-07-09T13:20:12.047 回答
1

用户在这里发布了同样的问题:

http://www.open-mpi.org/community/lists/users/2013/07/22296.php

邮件列表上发布的解决方案是:使用 mpiCC(或 mpic++),而不是 mpicc。

于 2013-07-10T01:33:39.467 回答