boost mpi python:未定义符号:_ZN5boost3mpi5timer14time_是_globalEv

boost mpi python:未定义符号:_ZN5boost3mpi5timer14time_是_globalEv,python,boost,mpi,Python,Boost,Mpi,我继承了一个使用boostmpi的大型python系统。 因此,我从源代码构建了Boost1.52,包括mpi和python组件 我已经从中为python 1.38.0.1构建了BoostMPI。 我意识到有更新的库(mpi4py),但我继承的软件使用BoostMPI 当我尝试使用它时,我得到 $ python Python 2.7.3 (default, Jan 4 2013, 14:54:17) [GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on lin

我继承了一个使用boostmpi的大型python系统。 因此,我从源代码构建了Boost1.52,包括mpi和python组件

我已经从中为python 1.38.0.1构建了BoostMPI。 我意识到有更新的库(mpi4py),但我继承的软件使用BoostMPI

当我尝试使用它时,我得到

$ python
Python 2.7.3 (default, Jan  4 2013, 14:54:17) 
[GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2
Type "help", "copyright", "credits" or "license" for more information.

>>> import boostmpi
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/projects/nrel/cid/lada.2013/pkgi/lib/python2.7/site-packages/boostmpi-1.38.0.1-py2.7-linux-x86_64.egg/boostmpi/__init__.py", line 7, in <module>
    from boostmpi._internal import *
ImportError: /projects/nrel/cid/lada.2013/pkgi/lib/python2.7/site-packages/boostmpi-1.38.0.1-py2.7-linux-x86_64.egg/boostmpi/_internal.so: undefined symbol: _ZN5boost3mpi5timer14time_is_globalEv

>>> from boostmpi._internal import *
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/projects/nrel/cid/lada.2013/pkgi/lib/python2.7/site-packages/boostmpi-1.38.0.1-py2.7-linux-x86_64.egg/boostmpi/__init__.py", line 7, in <module>
    from boostmpi._internal import *
ImportError: /projects/nrel/cid/lada.2013/pkgi/lib/python2.7/site-packages/boostmpi-1.38.0.1-py2.7-linux-x86_64.egg/boostmpi/_internal.so: undefined symbol: _ZN5boost3mpi5timer14time_is_globalEv

您的LIB构建不正确。您的boostmpi/_internal.so要么未链接到某些boost mpi库,要么期望与您现有的版本不同。你可以用

ldd /projects/nrel/cid/lada.2013/pkgi/lib/python2.7/site-packages/boostmpi-1.38.0.1-py2.7-linux-x86_64.egg/boostmpi/_internal.so
检查正在加载的库(如果有)。

这是您的问题

boostmpi-1.38.0.1-py2.7-linux-x86_64.egg/boostmpi/_internal.so  libboost_python.so.1.52.0 => /projects/nrel/cid/lada.2013/pkgi/lib/libboost_python.so.1.52.0 
boostmpi-1.38.0

libboost_python.1.52.0


您必须修复您的路径,因为它拾取了两个不同版本的boost,

我尝试了ldd,所有24个条目都已解决。我用ls检查了每一个,它们都存在。细节在上面。所以你的lib没有链接到libboostmpi,而是使用了libboostmpi中的符号。实际上,boostmpi\upython是boost的一个独立产品。Boost[是1.52.0。附加的Boost\u mpi-Python[是1.38.0.1。是的,但你错了,你必须独立于常规的Boost包编译Boost\u mpi-python,它是任何Boost下载源代码的标准版本,只是没有编译,因此你的系统上有两个相互冲突的Boost版本,你的教授上面的链接已经过时,它不是一个单独的产品[
boostmpi-1.38.0.1-py2.7-linux-x86_64.egg/boostmpi/_internal.so  libboost_python.so.1.52.0 => /projects/nrel/cid/lada.2013/pkgi/lib/libboost_python.so.1.52.0