gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 07:03:26 27 4
gpt4 key购买 nike

关闭。这个问题需要debugging details .它目前不接受答案。












想改进这个问题?将问题更新为 on-topic对于堆栈溢出。

1年前关闭。




Improve this question




我正在尝试使用 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
它只是打印了 Segmentation fault (core dumped) 并且存在。
我在Python中添加trace函数后,发现segfault是由 undefined symbol 引起的

ImportError: ./xx.so: undefined symbol: _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 melodic 时安装

最佳答案

find_package 中添加 Python 版本后问题解决

find_package(Boost COMPONENTS python3 REQUIRED)

关于Python 导入使用 Boost Python 构建的共享对象获得了 SegFault,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64584157/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com