メイン プログラムと共有ライブラリは、__static_initialization_and_destruction_0 で同じ静的変数を初期化します。

StackOverflow https://stackoverflow.com/questions/2631918

質問

dlopen() 内で初期化されたライブラリが、メインプログラムが所有する静的変数を初期化する理由を知っている人はいますか。メイン プログラムと共有ライブラリの両方に静的変数のコピーがありますが、何らかの理由で共有ライブラリがメイン プログラムの静的変数のコピーを再初期化して破棄し、メイン プログラムが静的変数を破棄しようとするとセグメンテーション違反が発生します。

これは、シンボル テーブル内の不正な名前の改ざんの場合ですか?

役に立ちましたか?

解決

これは、実行時リンカーがプロセス内のシンボルのアクティブなコピーを 1 つだけ必要とする場合です。共有オブジェクトと実行可能ファイルの両方にシンボルのコピーがある場合、実行時リンカーはそれらのいずれかへのすべての参照を解決します。

この問題を解決するためにできることは、 バージョンコマンド 共有オブジェクトを構築するときのリンクエディターの。静的変数のシンボルがグローバルでないことを確認してください。そうすれば、探している動作が得られます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top