2012-06-19 2 views
3

저는 파이썬 용 SWIG로 추상 C++ 클래스를 래핑하고 seg 오류 문제로 실행 중입니다. 다음은 내가 다루고있는 코드의 단순화 된 버전입니다. ("변경"열거입니다.)Python에서 확장 된 C++ 클래스의 Seg 오류 콜백 문제

Foo.h 파이썬에서 다음

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

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

.

I는 다음 (a SWIG 래핑 기능을 통해) C++ LIB에 MyFoo의 인스턴스를 전달

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

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

test.py 및 C++ 코드는 onStateChange에 호출을 시도한다. 처음으로 호출 될 때 print 문에서 결과를 볼 수 있으며 프로그램이 seg 오류로 인해 두 번째로 충돌합니다.

나는 SWIG 설명서를 여기에서 읽으려고합니다. http://www.swig.org/Doc1.3/Python.html#Python_directors은 내가하고 싶은 일을 구현하고 감독을 활성화했습니다. 나는 이것이 계속할만한 충분한 정보가 아닐지도 모른다는 것을 안다. 그러나 나는 지난 며칠 동안 높고 낮게 찾고 있었고 만족스러운 것을 찾지 못했다. 미리 감사드립니다.

+0

코드를 게시하여 누군가가 실제로 + 복사/붙여 넣기를 컴파일하여 특정 오류를 실제로 재생할 수 있도록 게시 할 수 있습니까? (오류를 생성하는 데 필요하지 않은 모든 것을 제거 할 수 있다면 바람직합니다. 프로세스에서 문제를 발견 할 수도 있습니다.) 이렇게하면 답을 찾는 것이 훨씬 쉬워집니다. [SSCE] (http://sscce.org/)를 만드는 방법에 대한 지침이 있습니다. –

+0

도움을 주셔서 감사합니다. 소규모로 이슈를 재현하려고 시도하면서 문제를 해결할 수있었습니다. –

답변

1

작은 예제를 만들려고 시도한 후 문제를 발견했습니다. 나는 C++ 코드가 자신의 스레드를 실행하고 파이썬 스레드를 호출하려고한다는 것을 잊어 버렸다. 이 문제를 해결하기 위해 수행해야했던 모든 작업은 -threads 옵션을 swig 명령에 추가하는 것이 었습니다.