Oracle® Solaris 11.2 リンカーとライブラリガイド

印刷ビューの終了

更新: 2014 年 7 月
 
 

DIRECT mapfile キーワードの使用方法

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() に対して確立されるように、prog3DIRECT 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
....

注 - W.so.2X.so.1 に対する同じ直接結合は、–B direct オプションまたは –z direct オプションを使用して prog4 を構築することで作成できます。この例の唯一の目的は、mapfile キーワードがどのように使用できるかを示すことです。