名前 | 形式 | 機能説明 | オプション | 環境 | ファイル | 属性 | 関連項目 | 注意事項
ld コマンドは、 再配置可能オブジェクトファイルの結合、 再配置の実行、 および 外部シンボルの解決を行います。 ld は、静的モードおよび動的モードの 2 つのモードで動作します。 モードは、 -d オプションで指定します。 静的モード、 -dn の場合、 引数で指定された再配置可能オブジェクトファイルを結合して、 実行可能なオブジェクトファイルを生成します。 同時に -r オプションが指定されると、 再配置可能オブジェクトファイルを結合して、 1 つの再配置可能オブジェクトファイルを生成します。 動的モード、 -dy は、 デフォルトのモードです。 このモードの場合、 引数で指定された再配置可能オブジェクトファイルを結合して、 引数で指定された共有オブジェクトファイルと実行時にリンクする、 実行可能なオブジェクトファイルを生成します。 同時に -G オプションが指定されると、 再配置可能オブジェクトファイルを結合して、 共有オブジェクトを生成します。 いずれの場合も、 ld の結果は、 デフォルトで a.out に出力されます。
引数にライブラリが指定された場合、 ld は、 引数リスト内で最初にライブラリを検出したときに 1 度だけ検索します。 ライブラリは、 再配置可能アーカイブまたは共有オブジェクトのどちらかです。 アーカイブライブラリの場合は、 ld は、未解決外部参照を定義するルーチンだけをロードします。 ld は、 ライブラリメンバーによって満たされる 外部参照を解決するため必要なパスの数だけ、 アーカイブライブラリのシンボルテーブルを 順次検索します。 ar(4) を参照してください。 したがって、 同一の外部シンボルを 複数のライブラリメンバーが定義していることがなければ、 ライブラリにおけるメンバーの順番は、 機能上は重要ではありません。
共有オブジェクトは不可分の完全なユニットで、 1 つ以上の入力ファイルを先にリンクすることによって生成されます。 リンカーが共有オブジェクトを処理する場合に、 共有オブジェクトの内容すべてが結果の出力ファイルイメージの 論理部分になります。 共有オブジェクトは、リンク処理中には物理的にコピーされません。 実行時に、共有オブジェクトが実際に取り込まれます。 この論理的な取り込みによって、 共有オブジェクト内に定義されているすべてのシンボルのエントリが、 リンク処理可能になります。
ld には 64 ビットオブジェクトをリンクするための 固有のオプションはありません。 32 ビットまたは 64 ビットのどちらにリンクを実行するかは、 ld によって処理される最初のオブジェクトのクラスによって決定されます。
以下のオプションをサポートします。
静的モード専用です。 実行可能なオブジェクトファイルを生成し、 未定義の参照があるとエラーとみなします。 静的モードのデフォルト時の動作です。 -a は -r オプションと同時に使用することはできません。
動的モード専用です。 実行可能ファイルを作成する際、 共有オブジェクト内のシンボルを参照する 再配置について、 特殊処理を行いません。 -b オプションを指定しない場合、 ld は、 共有オブジェクト内で定義されている関数への参照のために、 位置に依存しない特殊な再配置を作成し、 共有オブジェクト内で定義されているデータオブジェクトが、 実行時リンカーによって実行可能ファイルのメモリーイメージに コピーされるようにします。 -b オプションを指定すると、 出力コードは、 効率よくなりますが、 共有しにくくなります。
ライブラリの組み込みを指定するオプションです。 -B dynamic は、 動的モードでのみ有効です。 これらのオプションは、 コマンド行でトグルとして何度でも指定できます。 たとえば、 -B static オプションを指定すると、 -B dynamic が指定されるまで共有オブジェクトを受け付けません。 -l オプションも参照してください。
バージョン定義に割り当てられない グローバルシンボルを そのシンボルテーブルから削除します。 このオプションは、 mapfile バージョン定義の一部として使用できる auto-elimination 指令と同じようなシンボル削除を行います。
共有オブジェクトとその依存関係をグループとして確立します。 グループ内のオブジェクトは、 実行時に、グループの他のメンバーと結び付けられます。 このフラグを含んだオブジェクトの 実行時プロセスは、 RTLD_GROUP モードで dlopen(3X) を使用するプロセスに オブジェクトを追加した場合と同じように動作します。 グループは自己完結している ( 依存関係がグループ内で解決されている ) 必要があるため、 このオプションを使用する場合には、 さらに -z defs オプションをつけてグループが自己完結していることを確認してください。
バージョン定義に割り当てられていないすべての グローバルシンボルの割り当てを変更して、 ローカルシンボルにします。 バージョン定義は、 生成されたオブジェクト中で外部から参照可能なままにしておくべき グローバルシンボルを指定するもので、 mapfile を介して提供されます。 このオプションは、 mapfile バージョン定義の一部として提供されている auto-reduction 指令によるものと同等のシンボルの割り当て変更を実施できます。 バージョン化された再配置可能オブジェクトと されていないオブジェクトを統合する場合に便利です。
再配置可能オブジェクトを生成する際、バージョン定義で指定される シンボル情報の割り当てを ( グローバルからローカルへ ) 変更します。 バージョン定義は、 生成されたオブジェクト中で外部から参照可能なままにしておくべき グローバルシンボルを指定するもので、 mapfile を介して提供されます。 再配置オブジェクトの生成時、デフォルトでは、 バージョン定義は出力イメージに単純に転記されます。 つまりシンボル情報の実際の割り当て変更は、 動的実行形式または共有オブジェクトの構築時に オブジェクト自身が使用された時点で行われます。 動的実行形式または共有オブジェクトを生成する時には、 自動的に本オプションが適用されます。
動的モード専用です。 共有オブジェクトを作成する際、 グローバルシンボルの定義が入手可能であれば、 そのシンボルへの参照をその定義オブジェクト内で結合します。 通常は、 共有オブジェクト内 グローバルシンボル参照は、 定義が入手可能でも実行時まで結合されないので、 実行可能オブジェクト内 または 他の共有オブジェクト内の同一シンボルの定義によって、 オブジェクト自身の定義が無効になる可能性があります。 ld は、 -z defs でオプションが指定されていない場合は、 未定義シンボルについて警告を出力します。
デフォルトで -dy が指定されている場合、 ld は動的リンクを使用します。 また、 -dn が指定されている場合、 ld は静的リンクを使用します。 -B dynamic | static の項目も参照してください。
各 token によって指定されたデバッグ情報を標準エラー出力へ表示します。 特殊トークンの help は、すべてのトークンリストを指定したのと同じ意味を持ちます。
出力ファイルへのエントリポイントのアドレスを、 シンボル epsym のアドレスに設定します。
共有オブジェクトを作成する際に便利なオプションです。 共有オブジェクトのシンボルテーブルが、 name で指定された共有オブジェクトの シンボルテーブルにおいて補助フィルタ として使用されるように指定します。 このオプションは複数回指定できます。 このオプションは -F オプションとは同時に指定できません。
共有オブジェクトを作成する際に便利なオプションです。 共有オブジェクトのシンボルテーブルが、 name で指定された共有オブジェクトの シンボルテーブルにおいてフィルタ として使用されるように指定します。 このオプションは複数回指定できます。 このオプションは -f オプションとは同時に指定できません。
動的モード専用です。 共有オブジェクトを生成します。 未定義シンボルがあっても許容されます。
動的モード専用です。 共有オブジェクトを作成する際、 name をオブジェクトの動的セクションに記録します。 このオブジェクトとリンクされる実行可能オブジェクトでは、 このオブジェクトの UNIX システムにおけるファイル名の代わりに、 name が記録されます。 したがって、 実行時に検索する共有オブジェクト名として、 name が実行時リンカーによって使用されます。
LD_LIBRARY_PATH 設定を無視します。 このオプションは、 実行時のライブラリ検索に機能する LD_LIBRARY_PATH 設定が、 リンク処理実行の妨げになるときに、 役に立ちます。
実行可能オブジェクトを作成する際、 プログラムヘッダーに書き込まれるインタプリタのパス名として、 name を使用します。 静的モードにおけるデフォルトの設定では、 インタプリタなしです。 動的モードにおけるデフォルトの設定では、 実行時リンカー名 ld.so.1(1) です。 どちらの場合でも、 デフォルトの設定は、 -I name によって無効になります。 exec(2) は、 a.out をロードする際にこのインタプリタをロードし、 制御を a.out に直接渡す代わりにこのインタプリタに渡します。
ライブラリ libx.so または libx.a を検索します。 これらはそれぞれ、 共有オブジェクト および アーカイブライブラリの慣例的な名前です。 動的モードの場合、 -B static オプションが有効ではないかぎり、 ld は、 ライブラリ検索パスで指定された各ディレクトリ内で、 ファイル libx.so または libx.a を検索します。 ディレクトリ検索は、 このどちらかが入っている最初のディレクトリで終了します。 ld は、 -lx が libx.so および libx.a という形式の名前を持つ 2 つのファイルに展開された場合は、 .so ファイルを選択します。 libx.so が 1 つも見つからない場合に、 ld は、 libx.a を受け付けます。 静的モードの場合、 または -B static オプションが有効である場合、 ld は、 .a ファイルだけを選択します。 ld ライブラリの検索は、 そのライブラリの名前を検出した時点で ライブラリを検索するので、 -l の位置は重要な意味を持ちます。
path をライブラリ検索ディレクトリに追加します。 ld のライブラリ検索は、 最初に -L オプションで指定したディレクトリで行われ、 次に標準ディレクトリで行われます。 このオプションは、 同一コマンド行の -l オプションより前に指定した場合のみ役に立ちます。 環境変数 LD_LIBRARY_PATH を使用してライブラリ検索パスを補うことも可能です ( 後述の LD_LIBRARY_PATH を参照してください )。
メモリーマップ、つまり入力/出力セクションのリストを、 致命的ではない多重定義シンボルと合わせて生成します。 これは、標準出力に出力されます。
マップファイル mapfile を、 ld への指令が記述されているテキストファイルとして読み取ります。 このオプションは複数回指定することもできます。 mapfile がディレクトリの場合、 stat(2) で定義されるように、そのディレクトリ中のすべての通常ファイル が処理の対象になります。 マップファイルの詳細については、 「 リンカーとライブラリ 」 を参照してください。 /usr/lib/ld ディレクトリには、プログラムのデフォルトの配置が指定されているマップファイルや、4 ギガバイト以上および 4 ギガバイト未満の 64 ビット対応のプログラムをリンクするためのマップファイルがあります。後述の「ファイル」を参照してください。
このオプションをつけると、 作成されるオブジェクトの .dynamic セクションに DT_NEEDED エントリが追加されます。 DT_NEEDED 文字列の値は コマンド行で指定された string です。 このオプションは場所に依存するため、 DT_NEEDED .dynamic エントリはリンク行にある他の動的な依存関係に 関連します。
outfile という名前の出力オブジェクトファイルを生成します。 デフォルト時のオブジェクトファイル名は、 a.out です。
-Qy の場合は、 出力ファイルの作成に使用された リンカーのバージョンを識別するための ident 文字列が、 出力ファイルの .comment セクションに追加されます。 これにより、 ld -r を使用した場合のように、 複数のリンク手順で作成されたファイルには、 複数の ld -r があることになります。 これは、 cc コマンドのデフォルト時の動作と同じです。 -Qn は、バージョン識別を抑止します。
再配置可能オブジェクトファイルを結合して、 1 つの再配置可能オブジェクトファイルを生成します。 ld は、 未解決の参照があっても メッセージを出力しません。 このオプションは、 動的モードでは使用できません。 また、 -a と同時に使用することもできません。
コロンで区切られたディレクトリリストです。 ライブラリ検索ディレクトリを 実行時リンカーに指定するのに使用します。 これを指定すると、 NULL 以外の文字列であれば、 出力オブジェクトファイルに記録され、 実行時リンカーに渡されます。 このオプションを複数回指定した場合は、 コロンで区切った path と同じ意味を持ちます。
出力ファイルからシンボリック情報を取り除きます。 デバッグ情報、 つまり、 .debug 、 .line 、および .stab のセクション、 およびこれらと関連する再配置エントリは、 すべて削除されます。 シンボルテーブルおよび文字列テーブルのセクションも、 再配置可能ファイルと共有オブジェクトを除く、 出力オブジェクトファイルから削除されます。
サイズの異なる多重定義シンボルを検出した場合の 警告の出力を抑止します。
symname を、 未定義シンボルとしてシンボルテーブルに入力します。 ロードはすべてアーカイブライブラリから行う場合に便利です。 シンボルテーブルは最初は空であり、 最初のルーチンのロードを強制的に行うためには 未解決の参照が必要になるからです。 コマンド行内でのこのオプションの位置は、 重要な意味を持ち、 シンボルを定義するライブラリより前に 配置する必要があります。
使用する ld のバージョン情報を示すメッセージを出力します。
ライブラリ検索に使用するデフォルト時のディレクトリを変更します。 dirlist は、 コロンで区切られたパスのリストです。
このあとに続くすべてのアーカイブからオブジェクトの抽出条件を変更します。 デフォルトでは未定義の参照に応じて、 データ定義で仮に定義を行なって、アーカイブメンバーは抽出されます。 弱いシンボル参照は抽出を行いません。 -z allextract を指定すると、 すべてのアーカイブメンバーがアーカイブから抽出されます。 -z weakextract を指定すると、 弱い参照がアーカイブを抽出します。 -z defaultextract は先の抽出オプションのあとに、デフォルトを返す方法を提供します。
複数の再配置セクションを結合します。 複数のオブジェクトがメモリーにロードされるときの オーバーヘッドを削減します。
リンク終了時に未定義のシンボルがあると、 致命的エラーを強制的に出力します。 実行可能オブジェクトを作成する際の デフォルト時の設定です。 共有オブジェクト作成時に、 そのオブジェクトが自己完結していること、 つまり シンボリック参照がすべてオブジェクト内で 解決されることを確認するために、 このオプションを使用しても便利です。
リンク編集の一部として参照されない動的依存関係を 無視、または記録します。 デフォルトでは -z record が有効です。
他のすべてのオブジェクトの実行時の初期設定が同時に処理される前に、 実行時の初期設定を行うようにオブジェクトをマークします。 さらに、他のすべてのオブジェクトの最終設定が同時処理から削除されたあとに、 実行時の最終設定を行うようにします。 このオプションは共有オブジェクトを作成している場合にのみ意義があります。
レイジーにロードされる動的な依存関係のマークを、 有効または無効にします。 lazyload とマークした動的な依存関係は、初期プロセスの起動では ロードされず、 作成されたオブジェクトに最初に結合された時にロードされます。
オブジェクトが フィルタに結び付いたときに そのフィルタをすぐに実行時に処理するように、 オブジェクトをマークします。 通常、フィルタプロセスは、 シンボル参照がフィルタに結び付けられた時にはじめて処理されます。 このフラグを含んだオブジェクトの実行時プロセスは、 環境変数 LD_LOADFLTR が設定されている場合と同じように動作します。 ld.so.1(1) を参照してください。
重複したシンボル定義を許容します。 デフォルトでは、再配置可能オブジェクト間で重複したシンボル定義 が発生すると、致命的なエラーとなります。 本オプションは、エラーにはせずに、最初の定義を有効として 使用するようにします。
未定義シンボルを許容します。 共有オブジェクトを作成する際のデフォルト時の設定です。 動的モードで実行可能オブジェクトを作成するとき、および 解決されない共有オブジェクトをリンクするときに使用され、 実行オブジェクトに使われていないルーチン内で参照します。
実行時に削除できないように オブジェクトをマークします。 このフラグを含んだオブジェクトの実行時プロセスは、 RTLD_NODELETE モードで dlopen(3X) を使用して、オブジェクトをプロセスに追加する場合と同じように動作します。
dlopen (3X) が無効になるように オブジェクトをマークします。 dlopen() によって指定されるオブジェクトとして、 または dlopen() によって指定されるオブジェクトが要求する依存関係としてマークします。 このオプションは共有オブジェクトを作成している場合にのみ意義があります。
どのバージョンのセクションも記録しません。 すべてのバージョンセクション、または関連する .dynamic セクションエントリは出力イメージに作成されません。
実行時リンカーのデフォルトモードを無効にして、 非レイジーな実行時の結合を要求するように、 オブジェクトをマークします。 これは、 dlopen(3X) を使用して オブジェクトを RTLD_NOW モードでプロセスに追加したり、 環境変数 LD_BIND_NOW を設定したりすることに似ています。 ld.so.1(1) を参照してください。
実行時にすぐに $ORIGIN の処理を要求するように オブジェクトにマークします。
SHT_SYMTAB シンボルテーブルから、 SECT シンボルを除いたすべてのローカルシンボルを 削除します。 ローカルシンボルを参照する配置先はすべて、 対応する SECT シンボルを参照するように更新されます。
動的モード専用です。 書き込み不可の割り当て可能セクションに 対する再配置がある場合に、 致命的エラーを強制的に出力します。
動的モード専用です。 すべての割り当て可能セクションに対して、 書き込み不可の割り当て可能セクションも含めて 再配置を許可します。 共有オブジェクトを作成する際、 これがデフォルトです。
動的モード専用です。 書き込み不可の割り当て可能セクションに 対する再配置がある場合に、 割り当て可能セクションが残っているという警告を出力します。 実行可能オブジェクトを作成する際、 これがデフォルトです。
-l オプションで指定されたライブラリを 検索するディレクトリのリストです。 複数のディレクトリの間は、 コロンで区切られます。 最も一般的な例は、 次のようにセミコロンで区切られた 2 つのディレクトリリストです。
dirlist1;dirlist2
ld を呼び出したとき、 次のように -L が何回か指定されている場合、
ld . . . -Lpath1 . . . -Lpathn . . .
dirlist1 path1 . . . pathn dirlist2 LIBPATH
ディレクトリリストにセミコロンが含まれていない場合、 dirlist2 と解釈されます。
LD_LIBRARY_PATH 環境変数もまた、動的な依存関係の検索時に、実行時リンカーに効果があります。
LD_LIBRARY_PATH に似た環境変数です。 64 ビットの依存関係の検索時には、 LD_LIBRARY_PATH を上書きします。
ld へのデフォルト時のオプションの集まりです。 ld は、 LD_OPTIONS の値を、 コマンド行において ld を起動するコマンド名の直後に指定されたものとして解釈します。 つまり、次のように指定されているとみなします。
ld $LD_OPTIONS . . . other-arguments . . .
実行パスを指定するもう 1 つの方法です ( -R オプションを参照)。 LD_RUN_PATH と -R オプションの両方を指定した場合には、 -R オプションが優先されます。
文字列 LD_ で始まる環境変数名は、 ld と ld.so.1(1) の将来の拡張のために予約されているので、 注意してください。
ライブラリ
ライブラリ
出力ファイル
通常 /usr/lib 、または /usr/lib/sparcv9 (64 ビット SPARCV9 ライブラリ用)
32 ビットプログラムのデフォルトの配置が指定されているマップファイル
64 ビット SPARC V9 プログラムのデフォルトの配置が指定されているマップファイル
64 ビット SPARC V9 プログラムの、4G バイトより上のアドレスへ の推奨配置が示されているマップファイル
64 ビット SPARC V9 プログラムの、4G バイトより下のアドレスへ の推奨配置が示されているマップファイル
次の属性については attributes(5) のマニュアルページを参照してください。
属性タイプ | 属性値 |
使用条件 | SUNWtoo |
as(1), gprof(1), ld.so.1(1), pvs(1), exec(2), stat(2), elf(3E), dlopen(3X), a.out(4), ar(4), attributes(5)
SunOS 4.x.y のオプションのうち、 以下の 10 個は このリリースでは サポートされていません。 -B nosymbolic (この設定は、現在、 -B symbolic を使用しない場合のデフォルトになっています)、 -d 、 -dc 、および -dp (この 2 つの設定は、現在、デフォルトになっています。 それを無効にするには、 前述の -b を参照してください)、 -M 、 -S 、 -t 、 -x 、 -X 、 -ysym 。
SunOS 4.x.y のオプションで、サポートされないものは、 次の 6 つです。 -align datum 、 -A name 、 -D hex 、 -p 、 -T[text] hex 、 -T data hex. 。 これらのオプションの機能のほとんどは、 -M mapfile オプションを使用して実現できます。
SunOS 4.x.y のオプションで、 このリリースで廃止されるものは、 -n 、 -N 、 -z の 3 つです。