【问题标题】:Boost Python own module throws Segmentation Fault `GlobalError::PushToStack()`Boost Python自己的模块抛出分段错误`GlobalError::PushToStack()`
【发布时间】:2019-07-16 20:28:05
【问题描述】:

我正在尝试围绕我们为 Python 3.6 提供的现有 C++ 库。我遵循了 Boost Python 的教程:

都是SIGSEV,所以我在gdb下运行命令:

gdb --args python -c 'import MyPyLib'

而实际的输出是:

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff3bb02a9 in GlobalError::PushToStack() () from /usr/lib/x86_64-linux-gnu/libapt-pkg.so.5.0

我尝试从 Github 运行 boost-python-examples,但遇到了同样的问题。如果有帮助,我会继续:

  • gcc 7.4.0
  • g++ 7.4.0
  • python 3.6.8
  • ibboost-python-dev 1.65.1

【问题讨论】:

    标签: python c++ boost


    【解决方案1】:

    我发现了问题,所有例子都用

    find_package(Boost REQUIRED COMPONENTS python)
    

    但是如果你注意的话,系统中有两个库:

    sudo ldconfig -p | grep "libboost_python*"
            libboost_python3-py36.so.1.65.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libboost_python3-py36.so.1.65.1
            libboost_python3-py36.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libboost_python3-py36.so
            libboost_python-py27.so.1.65.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libboost_python-py27.so.1.65.1
            libboost_python-py27.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libboost_python-py27.so
    

    所以我开始怀疑我的模块被链接到 python 2.7 boost-python。 我换了CMakeLists.txt 实际组件:

    find_package(Boost REQUIRED COMPONENTS python3)
    

    现在它工作正常。令人惊讶的是,这种不匹配会引发如此神秘的错误。此外,cmake 在使用 python3 时抱怨没有找到或索引标题。

    【讨论】:

    • 当我在外部 C 库上添加我的 python 模块的一些依赖项但忘记链接到它时,我遇到了类似的问题(GlobalError::PushToStack 中的相同段错误)。你得到的不是一些丢失的符号错误,而是这个神秘的错误,而且很少有有意义的回溯。
    • 我在使用 Cython 时遇到了类似的问题。任何提示可能是什么问题?
    • @skboro 确保 python 库版本绝对匹配。如果他们不这样做,ABI 会抛出偷偷摸摸的错误。
    猜你喜欢
    • 2022-11-28
    • 1970-01-01
    • 1970-01-01
    • 2023-02-15
    • 1970-01-01
    • 2015-06-19
    • 2015-04-26
    • 1970-01-01
    相关资源
    最近更新 更多