【问题标题】:Seg Fault Callback Issues in a C++ Class Extended in Python在 Python 中扩展的 C++ 类中的 Seg 错误回调问题
【发布时间】:2012-06-21 18:40:34
【问题描述】:

我正在使用 SWIG for Python 包装一个抽象 C++ 类,并且遇到了段错误问题。这是我正在处理的代码的简化版本。 (“更改”是一个枚举。)

Foo.h

class Foo
{
public:
    virtual ~Foo() {};

    virtual void OnStateChange(Changes change) = 0;
};

然后在 Python 中。

test.py

class MyFoo(Foo):
    def __init__(self):
        super(MyFoo).__init__(self)

    def OnStateChange(self, change):
        print("the state has changed to", change)

然后我将 MyFoo 的一个实例传递给 C++ 库(通过 SWIG 包装的函数),C++ 代码尝试调用 OnStateChange。第一次调用它时,我看到了 print 语句的输出,第二次程序因段错误而崩溃。

我已在http://www.swig.org/Doc1.3/Python.html#Python_directors 阅读了关于实施我正在尝试做的事情的 SWIG 文档,并且我启用了导向器。我知道这可能没有足够的信息继续下去,但过去几天我一直在寻找高低,但没有找到任何令人满意的东西。提前致谢。

【问题讨论】:

  • 您能否发布足够多的代码,以便查看此内容的人实际上可以通过编译 + 复制/粘贴来重现特定错误? (如果您可以尝试删除产生错误所不需要的所有内容,那就更好了——哎呀,您甚至可能在此过程中发现问题)。这样做会更容易找到答案。以下是有关如何制作SSCE 的一些指导。
  • 感谢您的帮助。在尝试小规模复制问题时,我能够解决问题。

标签: c++ python multithreading callback virtual


【解决方案1】:

在尝试创建一个小示例后,我发现了这个问题。我忘记了 C++ 代码正在运行它自己的线程,并试图调用 Python 线程。解决问题所需要做的就是在 swig 命令中添加 -threads 选项。

【讨论】:

    猜你喜欢
    • 2012-12-16
    • 2012-05-08
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 2011-07-27
    • 2019-11-23
    • 2013-08-23
    相关资源
    最近更新 更多