0

グローバル変数を保持するためにフラグを使用dlopenして動的ライブラリをロードし、次に再ロードするときにそれらが再起動されないようにしようとしました。RTLD_NODELETEdlopen

しかし、ライブラリ内のいくつかの関数が更新されたときにライブラリをリロードしたい場合、dlopen(リロード前に私はインターフェイスを呼び出しましたdlclose) が機能しないようです。関数は同じ古いコードで実行されます。

だから私は今混乱しています。

dlopen使用してリロードするときに、動的ライブラリにグローバル変数を保持するにはどうすればよいですか。(関数を更新しますが、変数は変更しません。)

4

1 に答える 1

0

だから私は今混乱しています。

それがまさにRTLD_NODELETE意味することです:dlcloseそのようなライブラリでは (事実上) no-op です。コードはまるで一度も呼び出されていないかのように効果的に動作するため、dlclose後続dlopenのコードがリロードされないのも不思議ではありません (事実上ノーオペレーションにもなります)。

dlopen を使用して再ロードするときに、動的ライブラリにグローバル viriable を保持するにはどうすればよいですか。(関数を更新しますが、virables は変更されません)

できません。

于 2013-08-29T06:36:22.277 に答える