3

Python 用の SWIG を使用して抽象 C++ クラスをラップしていますが、seg fault の問題が発生しています。これは、私が扱っているコードの簡略化されたバージョンです。(「Changes」は列挙型です。)

フー。

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 のインスタンスを (SWIG でラップされた関数を介して) C++ ライブラリに渡し、C++ コードは OnStateChange の呼び出しを試みます。最初に呼び出されたときに print ステートメントからの出力が表示され、2 回目にはプログラムがセグ フォールトでクラッシュします。

私がやろうとしていることの実装に関するhttp://www.swig.org/Doc1.3/Python.html#Python_directorsの SWIG ドキュメントを読み、ディレクターを有効にしました。これでは十分な情報が得られないことは承知していますが、ここ数日間、さまざまな情報を検索してきましたが、満足のいくものは見つかりませんでした。前もって感謝します。

4

1 に答える 1

2

小さな例を作成しようとした後、問題を発見しました。C++ コードが独自のスレッドを実行していて、Python スレッドを呼び出そうとしていることを忘れていました。この問題を解決するために必要だったのは、swig コマンドに -threads オプションを追加することだけでした。

于 2012-06-20T14:38:20.577 に答える