マニュアルページ ild.1
名前
ild - オブジェクトファイル用のインクリメンタル・リンカー
形式
ild [ -a ] [ -i ] [ -m ] [ -s ] [ -t ]
[ -V ] [ -B dynamic|static ] [ -d y|n ]
[ -e epsym ] [ -I name ] [ -L path ] [ -l x ]
[ -o outfile ] [ -Q y|n ] [ -R path ] [ -u symname ]
[ -Y P,dirlist ]
[ -z allextract|defaultextract|weakextract ]
[ -z defs|nodefs ] [ -z i_dryrun ]
[ -z i_full ] [ -z i_noincr ] [ -z i_quiet ]
[ -z i_verbose ]
filename ...
機能説明
Sun Studio 9 インクリメンタル・リンカー
マニュアルページは、クイックリファレンスです。インクリメンタ
ル・リンカー(ILD) とそのオプションについての詳細は、C ユー
ザーズガイドを参照してください。
インストールした Sun Studio 9 ドキュメント (README、ユーザー
ズガイド、リファレンスマニュアルを含む) すべてにアクセスする
には、HTML ブラウザで以下を指定します。
file:/opt/SUNWspro/docs/ja/index.html
注- コンパイラおよびツールが
/opt 以外のディレクトリにインストールされている場合は、シス
テム管理者に実際のパスをお尋ねください。
ild では変更部分だけがリンクされるので、変更していないオブ
ジェクトファイルは再リンクを行わずに、変更したオブジェクト
コードを以前に作成した実行可能ファイルに挿入することができま
す。再リンクに必要な時間は、変更したコードの量によって異なり
ます。コードの変更が少ない場合は、リンク処理にかかる時間は短
くなります。
ild コマンドを実行すると、再配置可能なオブジェクトファイルが
組み合わされて再配置され、外部シンボルの参照先が決定されま
す。ild には、静的モードと動的モードの 2 つのモードがありま
す。静的モードは -dn で指定し、引数に指定した再配置可能なオ
ブジェクトファイルが組み合わされて、1 つの実行可能オブジェク
トファイルが生成されます。動的モード (デフォルト) は -dy で
指定し、静的モードと同様に、引数として与えられた再配置可能な
オブジェクトファイルが組み合わされて、1 つの実行可能なオブ
ジェクトファイルが生成されますが、実行時にこの実行ファイル
は、引数として与えられた共有オブジェクトファイルとリンクされ
ます。どちらのモードでも、ild のデフォルトの出力ファイルは
a.out です。
引数にライブラリが指定されている場合には、そのライブラリが引
数リストに出現した順に一度だけ検索されます。指定するライブラ
リは、再配置可能なアーカイブでも、共有オブジェクトでもかまい
ません。アーカイブライブラリについては、未決定の外部参照を定
義しているルーチンだけがロードされます。アーカイブライブラリ
・シンボルテーブル ( ar(4) を参照) は、ライブラリメンバーに
よって外部参照が解決されるまで、何度も検索されます。そのた
め、同じ外部シンボルを定義するライブラリメンバーが複数存在す
る場合以外は、ライブラリメンバーの順番は機能に影響しません。
共有オブジェクトは 1 つの分割できない実体なので、その参照は
生成している実行可能ファイル内で決定されるかまたは、リンク時
に他の共有オブジェクト内で決定される必要があります。
ild または ld のどちらを使用してリンクを行うかを指定するオプ
ションは、 -xildon (常に ild を使用) と -xildoff (常に ld を
使用) です。-xildon と -xildoff の両方が指定されている場合
は、-xildoff が適用されます。-xildoff も -G も指定されていな
い場合、-g オプションは ild を使用してリンクのみを実行します
(コマンド行でソースファイルを指定しない)。 -G を指定すると、
どちらのリンカが使用されるかが -g オプションによって決定され
ません。
注意 : -g オプションおよび -G オプションには、上記以外のコン
パイル機能があります。
-g を使用して ild を実行し、Makefile がデフォルトの構造であ
る場合 (リンク実行時にコマンド行で f3-g を指定する場合も含む
) は、自動的に ild が使用されます。
実装されていない ild オプションを指定すると (「使用上の留意
点」を参照)、ild は直接 /usr/ccs/bin/ld を起動してリンクを実
行します。
インクリメンタル・リンクの概要
インクリメンタル・モードでは、後にプログラムを拡張するときの
ために、初期リンク時にさまざまなテキスト、データ、bss、例外
テーブルセクションなどにスペースが追加されます。また、すべて
の再配置レコード、ranlib 指数、大域シンボルテーブルが ild に
よって実行可能ファイルに保存されます。
次回にインクリメンタル・リンクを行うと、タイムスタンプによっ
てどのオブジェクトファイルが変更されたかが調べられ、変更され
たオブジェクトコードを以前に作成した実行可能ファイルに追加し
ます。すなわち、以前のバージョンのオブジェクトファイルは無効
になり、実行可能ファイルのパディングセクションに、新しいオブ
ジェクトファイルがロードされます。無効になったオブジェクト
ファイル内のシンボルに対する参照はすべて、新しいオブジェクト
ファイル内のシンボルを参照するように変更されます。
オプション
-a 静的モードのみで、実行可能オブジェクトファイルを
作成します。未定義の参照にエラーを出します。静的
モードのデフォルト動作です。
-i LD_LIBRARY_PATH の設定を無視します。
LD_LIBRARY_PATH の設定が有効なときに、実行中のリ
ンク処理に干渉する実行時ライブラリの検索を変更す
る場合に使用します。(これは LD_LIBRARY_PATH_64
の設定にも適用されます。)
-m メモリーマップまたは入出力セクションのリストを生
成し、標準出力に出力します(「使用上の留意点」を
参照)。
-s シンボル情報を出力ファイルに出力しません。デバッ
グ情報 ( .debug, .line, .stab セクション) と、対
応する再配置エントリが出力されなくなります。再配
置可能ファイルまたは共有オブジェクトファイルを除
いて、シンボルテーブルと文字列テーブルのセクショ
ンも出力ファイルに出力されなくなります。
-t 複数回定義され、しかもサイズが異なるシンボルにつ
いての警告をオフにします。
-V 使用している ild のバージョンに関するメッセージ
を出力します。
-B dynamic|static
ライブラリの取り込みを制御するオプションです。
-Bdynamic は、動的モードのみで有効です。これらの
オプションをコマンド行で指定するたびに、モードが
切り換わります。-Bstatic を指定している場合に共
有オブジェクトを処理するには、-Bdynamic に切り替
える必要があります。-l オプションを参照してくだ
さい。
-d y|n -dy (デフォルト)を指定すると、動的リンク処理が
実行されます。 -dn を指定すると、静的リンク処理
が実行されます。 -B dynamic|static を参照してく
ださい。
-e epsym 出力ファイルの入口点アドレスをシンボル epsym の
アドレスに指定します。
-I name 実行可能ファイルを作成するときは、プログラムヘッ
ダに書き込まれるインタープリタのパス名として
name を使用します。静的モードでのデフォルトはイ
ンタープリタなしです。動的モードでは、デフォルト
はランタイムリンカ /usr/lib/ld.so.1の名前です。
どちらの場合も、-Iname で無効にすることができま
す。exec システムコールは、a.out をロードすると
きにこのインタープリタをロードし、インタープリタ
に制御を渡します。a.out に直接渡すことはしませ
ん。
-L path ライブラリ検索ディレクトリに path を追加します。
ライブラリは、最初にオプション -L で指定された
ディレクトリで検索され、次に標準ディレクトリで検
索されます。このオプションは、同じコマンド行上の
-l オプションの前に指定した場合だけ有効です。環
境変数 LD_LIBRARY_PATH および LD_LIBRARY_PATH_64
も、ライブラリ検索パスを追加することができます (
以下の ENVIRONMENT を参照)。
-l x ライブラリ libx.so または libx.a を探索します。
これらはそれぞれ共有オブジェクトとアーカイブライ
ブラリの一般的な名前です。動的モード、すなわち
-Bstatic オプションが指定されていないときは、ラ
イブラリ検索パスに指定された各ディレクトリで、
ファイル libx.so またはファイル libx.a を検索し
ます。どちらかのファイルが含まれている最初のディ
レクトリで、検索は停止します。libx.so と libx.a
という形式のファイルが両方ともある場合は、拡張子
.so が付いているファイルが使用されます。libx.so
がない場合は、libx.a が使用されます。静的モード
のとき、すなわち -Bstatic オプションが指定されて
いるときは、拡張子 .a が付いているファイルだけを
使用します。ライブラリは、ライブラリの名前が検出
された時に検索されるので、 -l を指定するのは重要
な意味があります。
-o outfile outfile という名前の出力オブジェクトファイルを作
成します。デフォルトのオブジェクトファイル名は
a.out です。
-Q y|n -Qy を指定すると、出力ファイルの .comment セク
ションに、出力ファイルの作成に使用したリンカの
バージョンを識別する ident 文字列が追加されま
す。この結果、複数回リンク処理を行った場合は、ld
-r を使用したときと同じように複数の ld idents が
追加されます。これは cc コマンドのデフォルト処理
と同じです。オプション -Qn を指定すると、バー
ジョンを識別する ident 文字列は追加されません。
-R path 実行時リンカに渡されるライブラリ検索ディレクトリ
を、コロン (:) で区切られたリストで指定します。
path が存在しかつ空でない場合は、path は出力オブ
ジェクトファイルに記録され、実行時リンカに渡され
ます。このオプションを複数回に分けて使用すると、
指定された検索ディレクトリは連結されてコロンで区
切られます。
-u symname symname をシンボルテーブルに未定義シンボルとして
記入します。これは、アーカイブライブラリ全体を
ロードするのに便利です。初期的にはシンボルテーブ
ルは空であり、最初のルーチンをロードするために未
解決の参照が必要だからです。このオプションは、シ
ンボルを定義するライブラリの前に指定してくださ
い。
-Y P,dirlist
ライブラリを検出するデフォルトディレクトリを変更
します。dirlist は、コロンで区切られたパスのリス
トです。
注意 : "-z name"という形は、ild で特殊なオプショ
ンを指定する場合に使用します。 -z オプションの接
頭辞として "-i_" を付けたものは、ild に固有のオ
プションとして識別されます。
-z allextract|defaultextract|weakextract
以降の、任意のアーカイブからオブジェクトを抽出す
る条件を変更します。デフォルトでは、未定義の参照
を解決し、仮の定義をデータ定義に変更して、アーカ
イブの抽出を行います。弱いシンボル参照は抽出され
ません。 -z allextract を指定すると、すべての
アーカイブメンバーがアーカイブから抽出されます。
-z weakextract を指定すると、弱い参照も抽出され
ます。 -z defaultextract を指定すると、以前の抽
出オプションの設定がデフォルトに戻ります。
-z defs リンク終了時に未定義シンボルが残っている場合、致
命的エラーを出力します。実行可能ファイルを作成時
はこれがデフォルトです。共有オブジェクトを作成
し、シンボル参照がすべてオブジェクト内部で決定さ
れるようにする場合に、このオプションを使用しま
す。
-z nodefs 未定義シンボルがあってもエラーとしません。共有オ
ブジェクトの作成時はこれがデフォルトです。実行可
能ファイルの作成時には、未定義シンボルは参照され
ません。
-z i_dryrun (ild のみ)。リンクされるファイルのリストを出力し
て、処理を終了します。
-z i_full (ild のみ)。インクリメンタル・モードで全体の再リ
ンクを行います。
-z i_noincr (ild のみ)。ild をインクリメンタル・モードでない
モードで実行します (ユーザーが使用するのはお勧め
できません。テスト用にだけ使用します)。
-z i_quiet (ild のみ)。次の 2 つのメッセージを表示しませ
ん。; `ild: (Performing full relink)... および
`ild: calling ld to finish link
-z i_verbose
(ild のみ)。次の 2 つのメッセージに書かれている
デフォルトの情報を拡張します。; `ild: (Perform-
ing full relink) ... および `ild: calling ld to
finish link' whenever the default text ends with
`[...]
環境変数
LD_LIBRARY_PATH
-l オプションで指定されたライブラリを検索するディレクト
リのリストです。複数のディレクトリはコロンで区切りま
す。通常は、1 つのセミコロンで区切られた 2 つのディレク
トリのリストが指定されています。
dirlist1;dirlist2
以下のように、-L を任意の回数指定して、ild を呼び出すと
します。
ild ... -Lpath1 ... -Lpathn ...
この場合、検索パスの順序は以下のようになります。
dirlist1 path1 ... pathn dirlist2 LIBPATH
ディレクトリのリストにセミコロンが入っていないときは、
dirlist2 と解釈されます。
LD_LIBRARY_PATH は、実行時リンカにライブラリ検索ディレ
クトリを指定するのにも使用されます。すなわち、
LD_LIBRARY_PATH が指定されていると、実行時リンカは、実
行時にプログラムとリンクされる共有オブジェクトを、
LD_LIBRARY_PATH に指定されたディレクトリで検索してか
ら、デフォルトディレクトリで検索します。
注意 : set-user-ID プログラムまたは set-group-ID プログ
ラムを実行するときは、実行時リンカは、 /usr/lib 内のラ
イブラリと、実行可能ファイル内に指定された絶対パス名を
検索します。この絶対パス名は、実行可能ファイルを作成す
るときに指定されたランパスです。相対パス名で指定された
ライブラリ関係は暗黙的に無視されます。
LD_LIBRARY_PATH_64
Solaris(TM) 7 ソフトウェアでは、この環境変数は
LD_LIBRARY_PATH と似ていますが、64 ビットの依存関係を検
索するときには、 LD_LIBRARY_PATH を無効にします。
Solaris 7 ソフトウェアが SPARC プロセッサ上で動作し、32
ビットモードでリンクするとき、 LD_LIBRARY_PATH_64 は無
視されます。 LD_LIBRARY_PATH だけが定義されている場合、
32 ビットのリンクと 64 ビットのリンクの両方にこの値が使
用されます。 LD_LIBRARY_PATH と LD_LIBRARY_PATH_64 の両
方が定義されている場合、32 ビットのリンクには
LD_LIBRARY_PATH が使用され、64 ビットのリンクには
LD_LIBRARY_PATH_64 が使用されます。
これらの環境変数についての詳細は、『リンカーとライブラ
リ』を参照してください。
LD_OPTIONS
ild のデフォルトのオプションです。 LD_OPTIONS は、ild
を起動するコマンドの直後に値が入力されたものとして解釈
されます。
ild $LD_OPTIONS ...その他のオプション ...
LD_PRELOAD
実行時リンカによって解釈される共有オブジェクトのリスト
です。指定された共有オブジェクトは、実行中のプログラム
の後、プログラムが参照する他の共有オブジェクトの前にリ
ンクされます。
注意 : set-user-ID プログラムまたは set-group-ID プログ
ラムを実行するときは、このオプションは暗黙的に無視され
ます。
LD_RUN_PATH
リンカに実行時パスを指定するもう 1 つの方法です ( -R オ
プションでも指定できます)。 LD_RUN_PATH と -R の両方を
指定すると、 -R で指定したパスが使用されます。
LD_DEBUG
(ild ではサポートされていません) 実行時リンカによって標
準エラーにデバッグ情報が出力されるように、トークンのリ
ストを指定します。特殊トークン help は、使用できるすべ
てのトークンを示します。
注意 : LD_ で始まる環境変数名は、ld の将来の拡張用に予約され
ています。ILD_ で始まる環境変数名は、ild の将来の拡張用に予
約されています。
注意事項
実装されていないオプションを指定すると、ild は
/usr/ccs/bin/ld を直接呼び出してリンクを実行します。
現在 ild では、以下の lldd オプションはサポートされていませ
ん。
-b
-G
-B symbolic
-D token
-F name
-h name
-M mapfile
-z muldefs
-z text
使用上の留意点
ild は、アーカイブライブラリのオブジェクトファイルのタイムス
タンプによって、変更されたオブジェクトファイルを特定します。
同じシンボルに対する複数の定義がライブラリに存在しない場合に
は、ild は正しい (すなわち、唯一の) シンボルを見つけることが
でき、正常に動作します。しかし、同じシンボルに複数の定義があ
る場合は、ild は正常に動作しないことがあります。また、このよ
うな場合に複数の定義を正しく処理できなくても、メッセージが出
力されないこともあります。
オプションの -m を使用すると、メモリーマップは作成されます
が、致命的エラーにはならない重複して定義されたシンボルについ
てのリストは標準出力に出力されません。
オブジェクトファイルがアーカイブファイルから抽出され、インク
リメンタル・リンクによって実行可能ファイルが作成されると、そ
のオブジェクトファイルへの参照がすべて削除されても、次に初期
リンクを実行するまで (バイナリを削除すると強制的に実行されま
す)、オブジェクトファイルが実行可能ファイル内に残ったままに
なります。
ファイル
libx.a ライブラリ
a.out 出力ファイル
LIBPATH 通常は /usr/ccs/lib:/usr/lib
関連項目
cc(1), CC(1), ld(1), exec(2), elf(3E), end(3C), a.out(4),
ar(4) f77(1)
『リンカーとライブラリ』
Sun Studio 9: 『C ユーザーズガイド』