我用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文档,以了解如何实现我要执行的操作,并且启用了Director。我知道这可能不足以提供足够的信息,但是过去几天来我一直在寻找高空寻找的东西,但没有找到令人满意的东西。提前致谢。

最佳答案

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

10-02 01:18
查看更多