5

私は Python パッケージをほぼ完全に C++ で作成しました。そうする理由は、既存の C++ ライブラリを手動でラップしたいからですが、それはここでは関係ありません。

この Python パッケージは、さまざまな拡張モジュールで構成されています。これらはすべて、「setup.py」スクリプトで distutils を使用してコンパイルします。これらの拡張モジュールは相互に関連付けることができます。その場合、共有ライブラリを Extension コンストラクターに渡すことでそれらをリンクします。明確にするために、2 つの Python C++ モジュール A と B があり、B は A で定義された関数を使用するとします。これらは通常、A.so と B.so にコンパイルされます。B は A で定義された関数を使用するため、通常どおり A モジュールをコンパイルし、B モジュールの Extension コンストラクターの libraries キーワードにライブラリーとして ':A.so' を渡します。(':' は、ライブラリが通常の 'lib' プレフィックスで始まらないという事実を g++ が処理できるようにします。) これは、関数とクラスをリンクする場合にうまく機能します。

私の問題は次のとおりです。A でいくつかのグローバル C++ 変数を定義しました。説明したことを行うと、B は A の関数にアクセスできますが、実際には、A で定義されたグローバル データの COPY を作成するようです。これは本当の問題です。私のため。

この問題は、ここや他の場所で説明されているように、共有ライブラリ間でグローバル変数を持つことと本質的に似ているように思えます。その解決策、および私がオンラインで見つけた他の解決策は、問題を解決していないようです。

どんな助けでも大歓迎です!

編集:はい、私のグローバル変数はexternとして宣言されていることを忘れていました。

4

2 に答える 2