libtoolは,dlopenするlibtoolオブジェクトとlibtoolライブラリファイルに
対し,たとえdlopen
とdlsym
関数が無いプラットフォー
ムでも,そのシンボルが解決できるように,特別のサポートを提供します.
“laziness”の増加順にプログラムにコードをロードする,以下の別の方法を 考慮します.
libtoolは,コンパイル時にオブジェクトファイルをプログラムにリンクし, プログラムのシンボルテーブルを表現するデータ構造を作成することで,スタ ティックなプラットフォームで‘-dlopen’オプションをエミュレートしま す.
この特徴を使用するため,プログラムのリンク時(see Link mode)に ‘-dlopen’や‘-dlpreopen’フラグを使用することで,アプリケーショ ンでdlopenしたいオブジェクトを宣言する必要があります.
name属性は,
"fprintf"
のような,シンボル名のNULL終端されて いる文字列です.address属性は,&fprintf
のような対応するオ ブジェクトへの一般的なポインタです.
lt_symbol構造体の配列で,プログラムにリンクされる,プリロードさ れているすべてのシンボルを表現します.それぞれの‘-dlpreloaded’ファ イルに対し,ファイルのnameを用いた要素と,
0
の addressがあり,このファイルからエクスポートされるすべてのシンボ ルが続きます.実行形式自身に対し,特別の名前@PROGRAM@が使用されます. 最後の要素は,nameと0
のaddressを持ちます.
ドル記号のような,ANSI Cでは有効ではない識別子を許可するコンパイラもあ ります.libtoolはANSI Cで有効なシンボル(最初がASCII文字またはアンダー スコアで,ゼロ個以上のASCII文字,数字,そしてアンダースコアが続くもの) のみ認識するので,非ASCIIシンボルはlt_preloaded_symbolsに出現し ません.