ここでは、インクリメンタルリンク、ild 固有の機能、メッセージ例、および ild オプションについて説明します。
この付録は、次の各節から構成されています。
ild はリンクエディタ ld の増補版で、ld の代替としてプログラムのリンクに使用されます。ild を使用すると、開発シーケンス (編集、コンパイル、リンク、デバッグループ) を効率的に進めることができ、標準のリンカーを使用するよりも作業時間を短縮できます。また、「修正継続機能 (fix と continue)」を使用すれば、再リンク作業を完全に排除することもできます。dbx の機能の 1 つである修正継続機能 (fix と continue) によって、再リンクの不要な作業が実現します。しかし、再リンクが必要になっても、ild を使用していればプロセスを短時間で終了できます。
ild は、未修正のオブジェクトファイルを再リンクしなくても、以前に作成した実行可能ファイルに修正済みのオブジェクトコードを挿入できるよう、インクリメンタルなリンクを行います。再リンクに必要な時間は、修正したコードの量によって決まります。アプリケーションを構築するたび、リンクに常に同じだけの時間がかかるわけではありません。コードの変更が少なければ、再リンクもすぐに終了します。
最初のリンクには、ild の場合も ld と同じくらいの時間がかかります。しかし、次のリンクからは、ld のリンクよりもかなり時間が短縮されます。リンク時間が短縮される分、実行ファイルのサイズが大きくなります。
ild を ld の代わりに使用すると、最初のリンクで、さまざまなテキスト、データ、bss、例外テーブルなどのセクションが、図 B-1 のように、将来の拡張に備えて追加領域に埋め込まれます (パディング)。さらに、すべてのリロケーションレコードとグローバルシンボルテーブルが、実行可能ファイルの新しい永続領域に保存されます。その後に続くインクリメンタルリンクでは、タイムスタンプから変更されたオブジェクトファイルが見分けられ、以前に作成された実行可能ファイルに、変更されたオブジェクトコードのパッチが当てられます。すなわち、旧バージョンのオブジェクトファイルは無効になり、新しいオブジェクトファイルが空領域 (または、必要に応じて、実行可能ファイルのパディングセクション) に読み込まれます。無効となったオブジェクトファイルのシンボルに対する参照はすべて、新しいオブジェクトファイルの正しい位置に修正されます。
ild では、ld のコマンドオプションがすべてサポートされているわけではありません。サポートされていないコマンドオプションが ild に渡されると (「注意事項」を参照)、ild は直接 /usr/ccs/bin/ld を起動してリンクを行います。
ild は特定の条件下で、ld の代わりのコンパイルシステムによって自動的に起動されます。ユーザーがコンパイルシステムを起動すると、続いてコンパイラドライバが起動します。そのドライバに特定のオプションを渡すことによって、ドライバは ild を使用することになります。コンパイラドライバはコマンド行からオプションを読み取り、正しい順序でさまざまなプログラムを実行し、渡された引数のリストからファイルを追加します。
例をあげて説明すると、まず、コンパイラドライバの cc が acomp (コンパイラのフロントエンド) を起動します。すると、acomp は最適化コードジェネレータを起動します。その後、cc は、コマンド行にリストされているほかのソースファイルにも同じことを実行します。ドライバは次に、オプションに応じて ild か ld のどちらかを呼び出し、それをコンパイルされたばかりのすべてのファイルだけでなく、プログラムを終了させるのに必要なほかのファイルやライブラリに渡します。
図 B-1 に、インクリメンタルリンクの例を示します。
リンク手順を ild または ld のどちらで実行するかは、次のコンパイルシステムのオプションで制御します。
-xildon − 常に ild を使用する
-xildoff − 常に ld を使用する
-xildon と -xildoff の両方が指定された場合は、-xildoff が優先されます。
-g − -xildoff も -G も指定されていなければ、ild を使用してリンクだけを起動する (コマンド行にソースファイルが指定されていない場合)
-G − -g オプションによるリンカー選択効力を無効にする
-g と -G オプションには別の意味も含まれます。コンパイルシステムについての記述を参照してください。
-g オプションを使用してデバッグ機能を起動したときに、デフォルトのメークファイル構成が設定されている (リンクコマンド行に、-g などのコンパイル時間に関するオプションが含まれている) 場合は、開発時に自動的に ild を使用することになります。
ild は最初のリンクで次の情報を保存します。
検出したすべてのオブジェクトファイル
作成した実行可能ファイルのシンボルテーブル
コンパイル時に解決されなかったすべてのシンボリック参照
最初の ild リンクには、ld リンクと同じくらいの時間がかかります。
ild はインクリメンタルリンクで次のことを行います。
変更されたファイルを特定する
修正されたオブジェクトファイルを再リンクする
保存されている情報を使用して、残りのプログラムの変更されたシンボリック参照を修正する
インクリメンタル ild のリンクは、ld のリンクよりもかなり短い時間で終了します。
通常、最初のリンクを 1 つ行うと、その後のリンクはすべてインクリメンタルリンクになります。
2 つのリンク時の動作を例をあげて説明しましょう。たとえば、ild が最初のリンクで、コードの中のシンボル foo を参照するすべての位置のリストを保存したとします。この後、foo の値を変更するインクリメンタルリンクを実行すると、ild は foo を参照するすべての参照値を変更します。
ild はプログラムのコンポーネントを展開し、実行可能ファイルの各セクションにパディングを行います。このパディングによって、実行可能モジュールは ld でリンクされる場合よりもサイズが大きくなります。インクリメンタルリンクが連続的に行われ、オブジェクトファイルのサイズが肥大していくと、パディングの余地がなくなってしまう可能性があります。こうなった場合、ild はメッセージを表示し、実行ファイル全体の完全な再リンクを行います。
図 B-1 を例にとって説明しましょう。図の 3 つのカラムはそれぞれ、リンクされた実行可能プログラムのテキストとデータのシーケンスを示しています。左のカラムは、ld によってリンクされた実行可能プログラムのテキストとデータです。中央のカラムは、ild でリンクされた実行可能プログラムに、パディングテキストとデータが追加されたことを示しています。ここでは、テキスト 1 のソースファイルが、ほかのセクションのサイズに影響することなく変更され、拡張されたと想定されます。右のカラムでは、テキスト 1 の元の位置がパディングされたテキストによって置き換わり (テキスト 1 が無効になる)、テキスト 1 は、テキストのパディング領域の部分に移動されています。
インクリメンタルでない小さな実行可能ファイルを作成するには、-xildoff オプションを使用してコンパイラドライバ (cc、CC など) を実行します。こうすると、ld が起動され、コンパクトな実行可能ファイルが作成されます。
ild で作成された実行可能ファイルは、dbx でデバッグできます。これは、dbx デバッガが、ild によってプログラム間に挿入されたパディングを認識できるためです。
ild でサポートされていないコマンド行オプションを指定すると、ild は ld を起動します。ild は /usr/ccs/bin/ld 内の ld と互換性があります。詳細については、「オプション」を参照してください。
ild には、特別なファイルは使用されません。
ild は、共有オブジェクトを作成するために起動されると、ld を起動してリンクを行います。
多くのオブジェクトファイルを変更すると、ild のパフォーマンスも大きく影響されます。ild は、かなりの比率で変更されたファイルを検出した場合、自動的に完全再リンクを実行します。
出荷用の最終的な製品コードを作成する場合は、ild を使用しないでください。プログラムの各部がパディングによって広げられるため、ファイルが大きくなってしまいます。パディングによるファイルの肥大とリンクに要する余分な時間を考えると、-xildon オプションを製品コードに使用することはお薦めできません。-g オプションが使用されている場合は、リンクの行で -xildoff を使用してください。
ild を小さなプログラムに使用しても、処理時間はさほど短縮されず、かえって大きなプログラムよりも実行可能ファイルのサイズが増大してしまうことがあります。
実行可能ファイルで動作する他社のツールを使用すると、ild で作成したバイナリファイルに予期せぬ結果が生じることがあります。
strip や mcs などのように、実行可能ファイルを修正するプログラムは、ild によるインクリメンタルリンクの実行機能に影響を及ぼす可能性があります。このような場合、ild はメッセージを出力し、完全再リンクを実行します。詳細については、「完全再リンクの要因」、および 「例 2: strip を実行した場合」を参照してください。
「ild: calling ld to finish link ...」というメッセージは、ild がリンクを完了できないため、リンク要求を ld に依頼して完了させることを意味します。
デフォルトでは、必要に応じて以下のようなメッセージが表示されるように設定されています。これらのメッセージは、-z i_quiet オプションによって非表示にすることができます。
ild: ld を呼び出してリンクを完了させます -- アーカイブ <library name> 中の共有ライブラリを処理できません
このメッセージは、ild が潜在的に要求されている場合 (-g が使用されている場合) は表示されませんが、明らかに -xildon がコマンド行に指定されていると表示されます。また、-z i_verbose オプションを使用すると、どのような場合も必ず表示され、逆に -z i_quiet オプションを使用すると、どのような場合も表示されなくなります。
ild: ld を呼び出してリンクを完了させます -- キーワード <keyword> を処理できません
ild: ldを呼び出してリンクを完了させます -- オプション -d <keyword> を処理できせん
ild: ldを呼び出してリンクを完了させます -- オプション -z <keyword> を処理できせん
ild: ldを呼び出してリンクを完了させます -- 引数 <keyword> を処理できません
「ild:(完全な再リンク中) ...」というメッセージは、何らかの理由で ild がインクリメンタルリンクを実行できず、完全再リンクを行う必要があることを意味します。これはエラーではありません。インクリメンタルリンクよりもリンクに時間がかかることを通知するためのメッセージです。詳細については、「ild の動作」を参照してください。ild メッセージは、ild オプションの -z i_quiet と -z i_verbose で制御できます。メッセージの中には、より説明的な文章を表示する冗長 (verbose) モードに変換できるものもあります。
これらのメッセージはすべて、ild オプションの -z i_quiet を使用して非表示にすることができます。デフォルトのメッセージが冗長モードで表示できる場合は、メッセージの末尾に「...」という省略符号が表示され、さらに詳しい情報が表示できることを示します。補足情報を表示するには、-z i_verbose オプションを使用します。この項のメッセージ例は、-z i_verbose オプションを指定することによって表示されたものです。
完全再リンクメッセージの最も一般的なものは、次のような「internal free space exhausted」メッセージで、内部空領域が使い果たされたことを意味するものです。
上記のコマンドは、1 行目のコンパイルから 2 行目のコンパイルに移行したことにより、実行可能ファイルのサイズがデバッグ情報で肥大したことを示しています。このサイズの肥大により、内部の空領域が不足したため、ild は完全再リンクを実行します。
strip コマンドを実行した場合もエラーが発生します。例 1 に続いて、次のようなコマンドを実行すると、エラーメッセージが表示されます。
# a.out を strip します。 # インクリメンタルリンクの 実行を試みます。 |
$ strip a.out $ cc -xildon -z i_verbose -g test1.c ild: (完全な再リンク中) a.out は最後にインクリ メンタルリンクを実行してから変更されていま す -- strip または mcs を実行したと思われます $ |
古いバージョンの ild で作成された実行可能ファイルで、新しいバージョンの ild を実行すると、次のようなエラーメッセージが表示されます。
# old_executable ファイルが 旧バージョンの ild で作成されたものと 仮定します。 |
$ cc -xildon -z i_verbose foo.o -o old_executable ild: (完全な再リンク中) a.out が最後にリンクされた時点 (206/3145777) 以降に、更新された ild がインストールされ ています |
(2/16) という数値は、内部レポート用としてのみ使用されています。
ild は、インクリメンタルリンクを実行するよりも、完全再リンクを実行する方が速いと判断する場合があります。たとえば、次のような場合です。
この例では、touch コマンドを使用したことによって x0.o 〜 x8.o のファイルが変更されており、それを認識した ild が、これら 9 つのオブジェクトファイルをすべてインクリメントしながら再リンクするよりも、完全再リンクを行った方が速いと判断しています。
前回のリンクが完全再リンクになった場合は、そのリンクと比較して、次に行うリンクも完全再リンクになる可能性があります。
前回のプログラムを再びリンクしようとすると、次のようなメッセージが表示されます。
# ild は前回のエラーを検出 したため、完全再リンクを行います。 |
$ cc -xildon -z i_verbose broken.o ild:(完全な再リンク中) 以前のリンクに 問題があったので、インクリメンタルモードでは 再リンクできません |
この場合は、完全再リンクが行われます。
この項では、コンパイルシステムで直接受け入れられるリンカー制御オプションと、コンパイルシステムから ild に渡されるリンカーオプションについて説明します。
コンパイルシステムで受け入れられるリンカー制御オプションには、次のものがあります。
-i
LD_LIBRARY_PATH 設定を無視します。LD_LIBRARY_PATH 設定が有効になっているときは、このオプションを使用すると、実行中のリンク編集の妨げとなる実行時ライブラリ検索を制御できます。
-s
出力ファイルからシンボリック情報を取り除きます。デバッグ情報と、それに対応するリロケーションエントリはすべて削除されます。リロケータブルファイルまたは共有オブジェクトを除き、シンボルテーブルセクションや文字列テーブルセクションも出力オブジェクトファイルから削除されます。
-V
使用中の ild バージョンに関するメッセージを出力します。
-B dynamic | static
ライブラリの内容を制御するオプションです。-Bdynamic オプションは、動的モードでのみ有効になります。これらのオプションは、トグルとしてコマンド行に何回でも指定することができます。-Bstatic オプションを指定すると、共有オブジェクトは -Bdynamic オプションを指定するまで受け入れられません。「-l x (スペースは任意)」オプションを参照してください。
-g
-g オプション (出力デバッグ情報) を指定すると、次のいずれかの条件が真でない限り、コンパイルシステムは ld の代わりに ild を起動します。
共有ライブラリを作成する -G オプションが指定されている
-xildoff オプションが指定されている
コマンド行にソースファイルが指定されている
-d y | n
-dy (デフォルト) を指定すると、ild は動的リンクを行い、-dn を指定すると、静的リンクを行います。「-B dynamic | static」オプションを参照してください。
-L path (スペースは任意)
path に指定されたパスをライブラリ検索用ディレクトリに追加します。ild は、まず -L オプションで指定されたディレクトリでライブラリを検索してから、次に標準のディレクトリを検索します。このオプションは、コマンド行で -l オプションより前に挿入されている場合のみ効果があります。環境変数の LD_LIBRARY_PATH を使用して、ライブラリ検索用のパスを追加することもできます。「LD_LIBRARY_PATH」を参照してください。
-l x (スペースは任意)
ライブラリ libx.so または libx.a を検索します。これらはそれぞれ、共有オブジェクトとアーカイブライブラリの慣用名になります。動的モードでは、-Bstatic オプションが有効でない限り、ild は、libx.so または libx.a ファイルのライブラリ検索用パスに指定されたディレクトリを検索します。-l オプションによって、libx.so および libx.a 形式の名前の 2 つのファイルが指定されている場合、ild は末尾が .so のファイルを選択し、そのファイルが検出された最初のディレクトリで検索を終了します。libx.so ファイルが検出されなかったときは、libx.a ファイルを検索します。静的モード、あるいは -Bstatic オプションが有効な場合には、ild は末尾が .a のファイルだけを選択します。ライブラリの検索は、名前が指定された場合のみ行われます。したがって、-l オプションの挿入には重要な意味が含まれます。
-o outfile
outfile に指定された名前の出力オブジェクトファイルを作成します。デフォルトのオブジェクトファイル名は、a.out です。
-Q y | n
-Qy オプションを指定すると、出力ファイルの .comment セクションに ident 文字列が追加され、ファイルの作成に使用されたリンクエディタのバージョンが識別されます。ld -r を使用した場合のように、複数のリンク手順がある場合は、複数の ld ident が追加されます。これは、cc コマンドのデフォルトのアクションと同じ結果になります。-Qn オプションを指定した場合には、バージョンの識別は行われません。
-R path (スペースは任意)
このオプションは、コロンで区切られたディレクトリのリストを指定することにより、実行時リンカーにライブラリ検索用ディレクトリを指示します。path は、空白でなければ、出力オブジェクトファイルに記録され、実行時リンカーに渡されます。このオプションのインスタンスを複数指定する場合は、コロンで区切りながら続けていきます。
-xildoff
インクリメンタルリンカーをオフにし、バンドルされた ld を強制的に使用します。-g オプションが使用されていない場合、または -G オプションが使用されている場合、このオプションはデフォルトになります。このデフォルトは、-xildon を使用して無効にすることができます。
-xildon
インクリメンタルリンカーを起動します。ild をインクリメンタルモードで強制的に実行します。-g オプションが使用されている場合、このオプションはデフォルト設定になります。このデフォルトは、-xildoff を使用して無効にすることができます。
-Y P, dirlist (スペースは任意)
cc 専用です。ライブラリの検索に使用されるデフォルトのディレクトリを変更します。dirlist オプションには、コロンで区切られたパスのリストを入力します。
「-z name」形式は、ild によって特別なオプションに使用されます。-z オプションの前に「i_」を挿入すると、ild 固有のオプションが識別されます。
-z defs
リンクの最後に未定義のシンボルが残っている場合に、強制的に致命的なエラーを発生させます。このオプションは、実行可能ファイルを作成しているときのデフォルトになります。また、共有オブジェクトを作成して、そのオブジェクトが自己充足型 (すべてのシンボリック参照が内部的に解決される型) であることを確証する場合にも便利です。
-z i_dryrun
ild 専用です。ild によってリンクされるファイルのリストを出力し、終了します。
-z i_full
ild 専用です。インクリメンタルモードで完全な再リンクを行います。
-z i_noincr
ild 専用です。ild をインクリメンタルでないモードで実行します。通常の使用はお薦めできません。テスト目的だけに使用するようにしてください。
-z i_quiet
ild 専用です。ild の再リンクメッセージをすべて非表示にします。
-z i_verbose
ild 専用です。一部の ild の再リンクメッセージに含まれるデフォルト情報を展開表示します。
-z nodefs
未定義のシンボルを許可します。このオプションは、共有オブジェクトを作成しているときのデフォルトになります。実行可能ファイルで使用した場合、このような「未定義シンボル」に対する参照動作は指定されません。
-z weakextract
シンボルに対する弱い参照は、シンボルを静的ライブラリから引用するようファイルに定義します。
以下のオプションも ild によって受け入れられますが、次の書式を使用して、コンパイルシステム経由で ild に渡す必要があります。
-Wl, arg,arg (cc の場合)、または -Qoption ld arg, arg (その他の場合)
-a
静的モードのときのみ実行可能オブジェクトファイルを作成します。未定義の参照には、エラーを発生させます。これは、静的モードのデフォルト動作になります。-a オプションは -r オプションと共に使用することはできません。
-m
標準の出力に、メモリーマップまたは入出力セクションのリストを作成します。
-t
多重定義されているシンボルや、サイズの異なるシンボルに関する警告機能をオフにします。
-e epsym
出力ファイルのエントリ位置のアドレスを、epsym で指定するシンボルの位置に設定します。
-I name
実行可能ファイルの作成時は、プログラムヘッダーに書き込まれるインタプリタのパス名として name を使用します。静的モードでは、デフォルトにより、インタプリタは使用されません。動的モードでは、実行時リンカー名 /usr/lib/ld.so.1 がデフォルトとして使用されます。これらはいずれも、-I name オプションによって無効にできます。exec システムコールは、a.out の読み込み時にこのインタプリタを読み込み、制御を a.out に直接渡すのではなく、読み込んだインタプリタに渡します。
-u symname
シンボルテーブルに未定義のシンボルとして symname を挿入します。このオプションは、アーカイブライブラリ全体を読み込むときに便利です。シンボルテーブルは最初は空になっており、最初のルーチンを強制的に読み込むために未解決の参照が必要だからです。したがって、コマンド行にこのオプションを挿入することは重要な意味を持ちます。このオプションは、シンボルが定義されているライブラリの前に挿入しなければなりません。
LD_LIBRARY_PATH
-l オプションで指定されたライブラリの検索先ディレクトリのリストです。複数のディレクトリを指定する場合は、コロンで区切ります。最も一般的には、次に示すように、2 つのディレクトリのリストをセミコロンで区切って指定します。
dirlist1; dirlist2
ild が、次のように複数の -L オプションのインスタンスで呼び出された場合、
ild ...-Lpath1 ... -Lpathn ...
検索パスの順序は次のようになります。
dirlist1 path1 ... pathn dirlist2 LIBPATH
ディレクトリのリストにセミコロンが使用されていない場合は、dirlist2 と解釈されます。
LD_LIBRARY_PATH は、実行時リンカーに対するライブラリ検索ディレクトリの指定にも使用されます。すなわち、環境変数に LD_LIBRARY_PATH が含まれていれば、実行時リンカーは、まずその変数に指定されたディレクトリで、実行時にプログラムにリンクさせる共有オブジェクトを検索し、その後、デフォルトのディレクトリを検索します。
set-user-ID または set-group-ID プログラムを実行しているときは、実行時リンカーは /usr/lib 内でしかライブラリを検索しません。実行時リンカーは、実行可能ファイル内に指定されたフルパス名も検索します。フルパス名は、実行可能ファイルが組み立てられたときに指定される実行パスで構成されます。相対パス名として指定されたライブラリの従属物は、事前通告なく無視されます。
LD_OPTIONS
ild のデフォルトのオプションセットです。LD_OPTIONS は、次に示すように、コマンド行で、あたかも ild の呼び出しに使用された名前の直後に値が挿入されていたかのように、ild によって解釈されます。 ild$LD_OPTIONS ... other-arguments ...
LD_PRELOAD
実行時リンカーによって解釈される共有オブジェクトのリストです。指定された共有オブジェクトは、実行されるプログラムと、そのプログラムが参照するほかの共有オブジェクトとの間にリンクされます。
set-user-ID または set-group-ID プログラムを実行しているときは、このオプションは事前通告なく無視されます。
LD_RUN_PATH
リンクエディタに対する実行パスを指定するための代替メカニズムです (-R オプションを参照)。LD_RUN_PATH と -R オプションの両方が指定されている場合は、-R オプションが適用されます。
LD_DEBUG
ild ではサポートされていません。実行時リンカーにデバッグ情報を標準エラーとして出力させるトークンのリストを指定します。特殊トークンの help は、使用できるすべてのトークンリストを示します。
「LD_」で始まる環境変数名は、ld の将来的な機能拡張に備えて予約されています。また、「ILD_」で始まる環境変数名は、ild の機能拡張に備えて予約されています。
ild は、コマンド行オプションが実行不能だと判断すると、直接 /usr/css/bin/ld を起動してリンクを行います。
コンパイルシステムに渡されるオプションのうち、ild でサポートされていないものは次のとおりです。
-G
動的モードのときのみ、共有オブジェクトを作成します。未定義のシンボルも許可されます。
-B symbolic
動的モードのときのみ、共有オブジェクトの作成中に、グローバルシンボルに対する参照をオブジェクト内の定義に結び付けます (定義が使用可能な場合)。通常、共有オブジェクト内のグローバルシンボルに対する参照は、たとえ定義が使用可能であっても、実行時まで連結されません。そのため、実行可能ファイルやほかの共有オブジェクト内の同一シンボルの定義によって、オブジェクト自体の定義を無効にすることができます。ld は、未定義のシンボルが -z defs オプションによって無効にされない限り、警告を出力します。
-b
動的モードのときのみ、実行可能ファイルの作成中に、共有オブジェクト内のシンボルを参照するリロケーション用の特別処理を行いません。-b オプションを使用しないと、リンクエディタは、共有オブジェクトに定義されている関数の参照に対し、位置に依存しない特別なリロケーションを作成します。さらに、共有オブジェクトに定義されているデータオブジェクトが、実行時リンカーによって実行可能ファイルのメモリーイメージにコピーされるよう調整します。-b オプションを使用すると、出力コードはより効果的になりますが、共有が難しくなります。
-h name
動的モードのときのみ、共有オブジェクトの作成中に、オブジェクトの動的セクションに name を記録します。オプション name は、オブジェクトの UNIX システムファイル名ではなく、このオブジェクトにリンクされている実行可能ファイルに記録されます。その結果、name は実行時リンカーによって、共有オブジェクトの名前として実行時の検索に使用されます。
-z muldefs
多重シンボル定義を許可します。デフォルトでは、多重シンボル定義がリロケータブルオブジェクト間に存在すると、致命的なエラーが発生します。このオプションを使用すれば、エラーを回避し、最初のシンボル定義を使用することができます。
-z text
動的モードのときのみ、書き込み不能かつ割り当て可能なセクションに対するリロケーションが残っている場合に、強制的に致命的なエラーを発生させます。
そのほかにも、ld に直接渡され、ild でサポートされていないオプションには、次のものがあります。
-D token, token, ...
トークンごとの指示に従って、デバッグ情報を標準エラーとして出力します。特殊トークンの help は、使用できるトークンのすべてのリストを示します。
-F name
共有オブジェクトを作成しているときのみ効果的なオプションです。共有オブジェクトのシンボルテーブルが、name で指定された共有オブジェクトのシンボルテーブルの「フィルタ」として使用されます。
-M mapfile
mapfile を ld に対する命令のテキストファイルとして読み取ります。マップファイルの詳細については、『SunOS 5.3 Linker and Libraries Manual』を参照してください。
-r
リロケータブルオブジェクトファイルを組み合わせて、1 つのリロケータブルオブジェクトファイルを作成します。ld は未解決の参照があっても気にしません。このオプションは、動的モードでの使用や、-a オプションとの共用はできません。
libx.a ライブラリ
a.out 出力ファイル
LIBPATH (通常は /usr/lib)