静的なstlコンテナクラスを含むクラス「A」を持つプロジェクトに取り組んでいます。このクラスは、私のメインプログラムと.soファイルの両方に含まれています。このクラスは、デフォルト(暗黙的、宣言されていない)コンストラクタ/デストラクタを使用します。メインプログラムは、dlopen()を使用して.soファイルをロードし、そのデストラクタでdlclose()を呼び出します。glibcが静的クラスメンバー変数のデストラクタを呼び出すと、メインが終了した後にプログラムがクラッシュします。問題は、dlclose()が呼び出されると、静的変数のデストラクタが呼び出され、次にmain exits()がデストラクタも呼び出すと、ダブルフリーが発生することです。
2つの質問があります
。1)この特定のケースでは、静的変数のコピーが2つないのはなぜですか(はい、それはややばかげているように聞こえますが、メインプログラムと.soファイルの両方に別々にコンパイルされた「A」があるためです、それぞれに1つあるべきではありませんか?)
2)静的メンバー変数を含まないようにクラス「A」を書き直さずにこの問題を解決する方法はありますか?