Android ndk で 2 つの異なるライブラリのシングルトンを作成しようとしています。
私が持っていると想像してください:
- lib1 (静的)
- lib2 (共有)
- lib3 (共有)
lib1
lib2
およびの LOCAL_STATIC_LIBRARIES として常に定義されます。lib3
しかし、lib2 でシングルトンの値を設定すると、この値は lib3 で NULL のままになります。
このアーキテクチャでシングルトンを構築するにはどうすればよいですか?
Android ndk で 2 つの異なるライブラリのシングルトンを作成しようとしています。
私が持っていると想像してください:
lib1
lib2
およびの LOCAL_STATIC_LIBRARIES として常に定義されます。lib3
しかし、lib2 でシングルトンの値を設定すると、この値は lib3 で NULL のままになります。
このアーキテクチャでシングルトンを構築するにはどうすればよいですか?
こことここで説明されているように、問題は一般的であり、良い解決策を認めていません。共有ライブラリには、コードとデータの両方で、リンクされた静的ライブラリの個別のコピーがあります。異なるSOの静的ライブラリインスタンスは相互作用しないだけであり、多くの理由もあります。
必要なのは、両方がアクセスできるメモリのチャンクです。シングルトンをJavaレベルまで上げることができます(結局のところ、Androidの下にあります)。よく知られている名前の一時ファイルを作成できます。経営幹部レベルのTLSも役立つかもしれません。
Androidの共有メモリ機能(ashmem
)は、名前付きブロックを提供しないため、役に立ちません。