この質問がこのフォーラムで以前に繰り返された場合は申し訳ありません。Macでdylibのロードとアンロードが期待どおりに機能しないという問題があります(特にアンロード部分)。問題は、実行可能ファイルがあり、A.dylib という共有ライブラリをロードし、ロードされた共有ライブラリを使用して B.dylib というライブラリをロードするかどうかです。後の段階でライブラリ B.dylib をアンロードしようとすると、エラー コードが返されません (返される int 値は 0 です。通常の dlopen 関数と dlclose 関数を使用してライブラリをロードおよびアンロードしているため、0 は正常にアンロードされたことを意味します)。 、しかし、アクティビティモニターまたはlsofを使用して確認すると、b.dylibがまだメモリ内にあります。
現在、このコードを Windows、Linux、および Mac に移植しています。Windows と Linux は期待どおりに動作しますが、Mac だけで問題が発生します。
Mac 開発者ライブラリを読んでいて、次のことがわかりました: "動的ライブラリがアンロードされないケースがいくつかあります: 1) 主な実行可能ファイルがそれに対してリンクしている、2) アンロードをサポートしない API (例: NSAddImage()) を使用して、それまたはそれに依存する他の動的ライブラリをロードしました。3) 動的ライブラリは dyld の共有キャッシュにあります。」
私の場合、最初の 2 つのケースのいずれにも当てはまりません。私はケース3を疑っています。
これが私の質問です: 1. ケース 3 であることを確認するにはどうすればよいですか? 2. はいの場合、どのように修正しますか? 3. そうでない場合、どうすれば修正できますか? 4. Mac はなぜそんなに違うのですか?
この点で何か助けていただければ幸いです!
ありがとう、ヤン