问题描述
我正在尝试使用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})
和cmake
返回了
-- 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 shell并输入
>>> import xx
它只是打印出分段错误(核心已转储)并存在。
在Python中添加跟踪功能后,我发现段错误是由未定义的符号引起的
ImportError:./xx.so:未定义的符号:_ZN5boost6python6detail11init_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)
如第二行所示,它链接到Boost Python 2.7库,我认为这是导致段错误的原因,但是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 Boost
是在安装ROS旋律时安装的
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)