DIRECT mapfile キーワードは、個々のシンボルに対して直接結合を確立する手段を提供します。このメカニズムは、特別なリンク編集のシナリオを対象としています。
前の例で使用されたコンポーネントから、関数 main() は外部関数 W() と X() を参照します。これらの関数の結合はデフォルトの検索モデルに従います。
$ LD_DEBUG=symbols,bindings prog3 .... 18754: symbol=W; lookup in file=prog3 [ ELF ] 18754: symbol=W; lookup in file=./W.so.2 [ ELF ] 18754: binding file=prog3 to file=./W.so.2: symbol 'W' .... 18754: symbol=X; lookup in file=prog3 [ ELF ] 18754: symbol=X; lookup in file=./W.so.2 [ ELF ] 18754: symbol=X; lookup in file=./X.so.2 [ ELF ] 18754: binding file=prog3 to file=./X.so.2: symbol 'X'
直接結合が関数 W() と X() に対して確立されるように、prog3 は DIRECT mapfile キーワードを使用して再構築できます。
$ cat mapfile $mapfile_version 2 SYMBOL_SCOPE { global: W { FLAGS = EXTERN DIRECT }; X { FLAGS = EXTERN DIRECT }; }; $ cc -o prog4 -R. main.c W.so.2 X.so.2 -Mmapfile
実行時の結合を確認するために、LD_DEBUG 環境変数を使用できます。
$ LD_DEBUG=symbols,bindings,detail prog4 .... 23432: symbol=W; lookup in file=./W.so.2 [ ELF ] 23432: binding file=prog4 to file=./W.so.2: symbol 'W' (direct) 23432: symbol=X; lookup in file=./X.so.2 [ ELF ] 23432: binding file=prog4 to file=./x.so.2: symbol 'X' (direct)
lari(1) ユーティリティーは直接結合情報を表示することもできます。しかしこの場合、関数 W() と X() は多重定義されていません。このためデフォルトでは、lari にはこれらの関数が興味深いものであることはわかりません。すべてのシンボル情報を表示するために、–a オプションを使用する必要があります。
$ lari -a prog4 .... [1:1ED]: W(): ./W.so.2 .... [2:1ED]: X(): ./X.so.2 ....