Python导入使用Boost Python构建的共享对象获得SegFault



我正试图用Boost Python将C++库封装到Python模块中
使用Python 2.7时一切正常,但升级到3.6时出现分段错误。

在我的CMakeLists.txt中,我写了

find_package(Pythonlibs 3.6 REQUIRED)
find_package(Boost COMPONENTS python REQUIRED)
message(STATUS ${Boost_INCLUDE_DIR})
message(STATUS ${Boost_LIBRARIES})
message(STATUS ${PYTHON_INCLUDE_DIR})
message(STATUS ${PYTHON_LIBRARIES})

CCD_ 2返回

-- Boost version: 1.65.1
-- Found the following Boost libraries:
--   python
-- /usr/include
-- /usr/lib/x86_64-linux-gnu/libboost_python.so
-- /usr/include/python3.6m
-- /usr/lib/x86_64-linux-gnu/libpython3.6m.so

make输出我想在Python中使用的共享对象,比如xx.lib
我打开了一个Python外壳并键入

>>> import xx

它只是打印了Segmentation fault(核心转储(并存在
在Python中添加跟踪函数后,我发现segfault是由未定义的符号引起的

ImportError:/xx.so:未定义符号:_ZN5boost6ython6detail11init_moduleER11PyModuleDefPFvvE

然后我使用idd查找共享对象的依赖项,它显示(部分(

linux-vdso.so.1 (0x00007ffe636c5000)
libboost_python-py27.so.1.65.1 => /usr/lib/x86_64-linux-gnu/libboost_python-py27.so.1.65.1 (0x00007f801af9b000)
libpython3.6m.so.1.0 => /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0 (0x00007f801a8f0000)

如第二行所示,它链接到BoostPython2.7库,我认为这是我得到segfault的原因,但libboost_python-py36.so确实存在

$ ls /usr/lib/x86_64-linux-gnu/ | grep libboost_python-py
libboost_python-py27.a
libboost_python-py27.so
libboost_python-py27.so.1.65.1
libboost_python-py36.a
libboost_python-py36.so

为什么它链接到错误的库?非常感谢!

[更新]
操作系统:Ubuntu 18.04
安装ROS旋律时安装了Boost

find_package中添加Python版本后,问题得到了解决

find_package(Boost COMPONENTS python3 REQUIRED)

最新更新