3

Web 上のさまざまなチュートリアルに従って、SWIG を使用して Python で C++ クラスのラッパーを作成しようとしました。

私のクラスは次のようになります。

/*file libraryInstance.h*/
struct LibraryInstance
{
    void init();
    void terminate();
private:
    std::shared_ptr<AnObject> m_spAnObject;
};

Python の説明のために、この .i ファイルを作成しました。

%module LibraryInstance
%{
#include "libraryInstance.h"
%}
%include "libraryInstance.h"

次に、コマンドを実行しましたswig -c++ -python -o ./src/libraryInstance_wrap.cpp ./src/libraryInstance.i

出力エラーなしで、swig は 2 つのファイルを生成しlibraryInstance_wrap.cppLibraryInstance.py

次に、.c++ ファイルをコンパイルしますlibraryInstance_wrap.cpp。すべてが正常にコンパイルされ、ライブラリの .so ファイルが取得されます。

生成された swig を見るとLibraryInstance.py、次のことがはっきりとわかりますclass LibraryInstance

参照。生成された python ラッパー全体がここにあります。

しかし、コマンドを起動するpython LibraryInstance.pyと、.so と同じディレクトリで次のエラー出力が表示されます。

Traceback (most recent call last):
  File "LibraryInstance.py", line 26, in <module>
    _LibraryInstance = swig_import_helper()
  File "LibraryInstance.py", line 18, in swig_import_helper
    import _LibraryInstance
ImportError: No module named _LibraryInstance

そして、LibraryInstance.py のコードを見ると、例外 ImportError がスローされたかのように見えます。モジュールは python で見つかりません。(18行目)。

これを修正するにはどうすればよいですか?

4

1 に答える 1

5

SWIG ドキュメントの31.2.2 項では、ライブラリの名前 .so は_NameOfTheModule.so

そのため、ライブラリの名前を..._LibraryInstance.soの代わりに変更し、モジュールが正常に読み込まれるようになりました。LibraryInstance.so

于 2013-01-30T18:28:13.483 に答える