A1、A2という2つのアプリケーションが実行時にアプリケーションにロードされる共有オブジェクト(lib1など)を共有します。 A1はdlopenを使用してlib1を正常にロードしました。今A2はライブラリをロードしようとしています。 A2は大丈夫ですか? (lib1がA1アドレス空間にロードされるためです。)A1がRTLD_LOCALを使用してロードされるとどうなりますか? A2はlibをロードできますか?
答え1
もちろんです。 ~から図書館に関するウィキペディア記事:
共有ライブラリまたは共有オブジェクトは、実行可能ファイルおよび他の共有オブジェクトファイルが共有することを意図したファイルです。
つまり、「共有」と呼ばれる理由は、複数の実行ファイルがそれを使用するためです。
ドキュメントからRTLD_LOCAL
:
このライブラリで定義されたシンボルは、後でロードされたライブラリへの参照を確認するためには使用できません。
フラグは、RTLD_LOCAL
単にロード時に関数を定義し、ロードするとローカルにロードされるため、fromを使用できないことをdlopen()
示します。A1
lib1
f1()
A1
lib2
f1()
lib1