このdlsym
関数はキャッシュを行いません。これは単に ELF シンボル テーブルにアクセスしているだけです (あまりうまく実装されていないハッシュ テーブルを使用しています)。
dlsym
同じ名前とライブラリを何度も (たとえば、何百万回も)呼び出すことは避けるべきだと思います。
怠惰な手法を使用する場合があります。たとえば、dlsym
呼び出しで使用される名前とライブラリを (構造体またはクラスの一部で) dlsym
-ed 関数ポインターと一緒に配置しdlsym
、そのポインターが null の場合にのみ呼び出します。
dlsym
また、できるだけ早く失敗をキャッチしたい場合もあります。
FWIW、あなたは何度も電話をかけることができdlopen
ますdlsym
。特に、私のmanydl.cの例が示すように、Linux では何十万ものdlopen
-ed 共有ライブラリーを持つことができます。ただし、内部に -ed 関数のアクティブな呼び出しフレームがまだある場合は、ライブラリを -ing しないでください。実際には、呼び出すことはなく、プログラムは引き続き動作します (わずかなプロセス アドレス空間リークが発生します)。 dlclose
dlsym
dlclose