我使用Boost::python创建了一个python扩展。为了更容易在不同的目标机器上使用扩展,我将libboost_python36.so.1.75.0库与生成的扩展(pyshmringbuffer.so)放在同一个目录中
我将pyshmringbuffer.so和libboost_python36.so.1.75.0签出到一台机器上,而不是编译在目录:/path/to/pyshmringbuffer中
在将LD_LIBRARY_PATH设置为:/PATH/to/pyshmringbuffer并更改为该目录后,我能够运行python3.6并导入共享对象
当我尝试从备用目录运行python时,问题就出现了。从任何其他目录中,我附加python路径,如下所示:
import sys
sys.path.append("/path/to/pyshmringbuffer")
然后,当我尝试导入pyshmringbuffer时,我得到以下未定义的符号:
ImportError: /path/to/pyshmringbuffer/pyshmringbuffer.so: undefined symbol: _ZNK5boost6python7objects21py_function_impl_base9max_arityEv
我的印象是,所有符号都包含在共享对象中。为什么从何处导入共享库很重要
我可以通过在python路径前加/path/to/pyshmringbuffer来解决我的问题,方法是使用:
我不能肯定,但正如@PRUNE所指出的,python在看到预期的库之前已经看到了我的python路径中的某些东西
巧合的是,我确实在目标机器的其他地方有一个libboost_python36.so.1.75.0的构建。这条路径没有出现在我的PYTHONPATH或LD_LIBRARY_路径上,因此我不认为它会干扰,但我不能肯定
错误消息中的符号是内部符号,由其中一个生成工具生成。如果有一个未定义的组件,则表明其中一个组件是使用不兼容的工具版本构建的,或者
*.so
文件(共享对象)以其他方式过时解决这一问题的最简单方法通常是从头开始,按照正确的顺序重新构建产品组件
相关问题 更多 >
编程相关推荐