我用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选项。