在 Python 中扩展的 C++ 类中的 Seg 错误回调问题

Seg Fault Callback Issues in a C++ Class Extended in Python

本文关键字:错误 问题 回调 Seg C++ Python 扩展      更新时间:2023-10-16

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

福.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 语句的输出,第二次程序因 seg 错误而崩溃。

我已经阅读了这里的SWIG文档 http://www.swig.org/Doc1.3/Python.html#Python_directors 关于实现我正在尝试做的事情,并且我启用了控制器。 我知道这可能还不足以继续下去,但过去几天我一直在上下搜索,没有找到任何令人满意的东西。 提前谢谢。

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