リンカーとライブラリ

機能のテスト

特別なハンドル RTLD_DEFAULTRTLD_PROBE を使用すると、ほかのシンボルの有無を確認するためにアプリケーションをテストできます。シンボル検索は、呼び出しオブジェクトを再配置する場合に使用されるものと同じモデルに従います。「デフォルトのシンボル検索モデル」を参照してください。たとえば、アプリケーション prog に次のようなコードフラグメントが組み込まれているとします。


        if ((fptr = (int (*)())dlsym(RTLD_DEFAULT, "foo")) != NULL)
                (*fptr)();

この場合、foo が、まず prog で、次に /lib/libc.so.1 で検索されます。このコードフラグメントが、図 3–1 の例で示すようにファイル B.so.1 に組み込まれていた場合、foo の検索は B.so.1C.so.1 でも、この順に継続して行われます。

このメカニズムによって、「ウィークシンボル」で説明した、定義されていないウィーク参照の代わりに使用できる、堅牢かつ柔軟性のある代替機能が提供されます。