5

私はこれについて何度も疑問に思っていましたが、明確な答えは得られませんでした。boost.python フレームワーク内で別の boost.python モジュールにリンクすることは可能ですか。

たとえば、boost_python_module(libA) 内でクラス A をエクスポートし、boost_python_module(libB) 内で関数 B(A a) をエクスポートしました。libAのAにリンクするようにlibBで指定することは可能ですか?

この問題を別の見方で見ると、現在、すべてのバインディングを 1 つのモジュール内で 1 回で生成する必要があるということです。複数のboost_python_moduleでバインディングを段階的に生成することは可能ですか?

4

2 に答える 2

1

あなたが求めているものを処理する Boost.Python の方法は、チュートリアルで説明されているようにパッケージをコンパイル ユニットに分割し、後で実際にモジュールを宣言するメイン コンパイル ユニットでマージを行うことです。

モジュールをロードするときに Python によって実行される特定の Python エントリ ポイントを宣言するため、Boost.Python で独立したモジュールをリンクすることはできません。たとえば、バイナリモジュール名がの場合、Python インタープリターは呼び出された関数(つまり、宣言されているもの)mod.soを探し、その関数のコードを実行します。その関数のコード内で、オブジェクト (インスタンス、クラスなど) の Python C-API 宣言を見つけることが期待されます。init_modBOOST_PYTHON_MODULE(mod)

たとえば、mod.soバイナリを別のモジュール バイナリ (たとえば、foo.so) にリンクすると、Python がロードされたときにを見つけて実行するmod.soだけでinit_modを無視しinit_fooます。

于 2013-08-15T06:53:39.850 に答える
0

共有ライブラリについてはよくわかりませんが、私にとってうまくいくのは、相互に参照できるすべてのモジュールを python: 内にインポートすることですimport libA; import libB

もちろん、これらのインポートを__init__.pyファイルに入れることは可能ですimport myLib

于 2010-06-29T09:26:19.307 に答える