ld コマンド
目的
オブジェクトファイルをリンクする。
構文
ld [ -D Number ] [ -e Label ] [ -G ] [ -H Number ] [ -K ] [ -m ] [ -M ] [ -o Name ] [ -r ] [ -s ] [ -S Number ] [ -T Number ] [ -u Name ] ... [ -v ] [ -V ] [ -z ] [ -Z String ] ... [ -b Option ] ... [ -L Directory ] ... { -f FileID ... -l Name ... InputFile ... }
またはld -bsvr4 [ -d[y | n] ] [ -D Number ] [ -e Label ] [ -G ] [ -H Number ] [ -K ] [ -m ] [ -M ] [ -o Name ] [ -r ] [ -R Path ] [ -s ] [ -S Number ] [ -T Number ] [ -u Name ] ... [ -v ] [ -V ] [ -z [ defs | nodefs ] ] [ -z multidefs ] [ -z [text | nowarntext | warntext ] ] ] [ -Z String ] ... [ -b Option ] ... [ -L Directory ] ... { -f FileID ... -l Name ... InputFile ... }
説明
リンケージエディターやバインダーとも呼ばれる ld コマンドは、オブジェクトファイル、アーカイブ、インポートファイルを1つの出力オブジェクトファイルに結合し、外部参照を解決する。 ld コマンドは実行可能なオブジェクトファイルを生成する。 さらに、 -s フラグを付けずに ld コマンドを指定すると、その出力ファイルを、 コマンドの別の呼び出しのパラメータとして使用することができる。 InputFileld パラメータとして使用できる。 デフォルトでは、ld コマンドは出力を作成し、a.out というファイル内に置きます。
ld コマンドは、すべての入力オブジェクト・ファイルをリストすることなく、プログラムを再リンクすることができる。 例えば、大規模なプログラムのオブジェクト・ファイルが1つ変更された場合、新しいオブジェクト・ファイルと古いプログラムをコマンド・ラインにリストアップし、プログラムが必要とする共有ライブラリも一緒にリストアップすることで、プログラムを再リンクすることができる。 詳しくは例を参照。
ld コマンドは、コマンド行で指定された順序で入力ファイルをリンクします。 同じファイルを複数回指定すると、そのファイルの最初のオカレンスのみが処理されます。 -bI、 -bimport、 -bkeepfile、 -f、 -l フラグ、またはパラメータとして、少なくとも1つの入力ファイルを指定する。 InputFile パラメータで指定する。 -bI、 -bimport、 -bkeepfile フラグは、 I、 import、 keepfile オプションと一緒に使われる -b フラグである。
オペレーティング・システム上で実行するプログラムを作成する場合は、cc コマンドを使用してファイルをリンクしてください。 cc コマンドは共通オプションと必要なサポート・ライブラリーを指定して ld コマンドを呼び出すので、コマンド・ラインにそれらのオプションとライブラリーを指定する必要はありません (この情報は、/etc/xlC.cfg または /etc/vac.cfg の構成ファイルから読み取られます)。
- リンク・モード
ld コマンドは32ビット・オブジェクトとプログラム、64ビット・オブジェクトとプログラムをリンクできるが、32ビット・オブジェクトと64ビット・オブジェクトは一緒にリンクできない場合がある。 リンクのモードを指定するには、 OBJECT_MODE 環境変数または -b32 または -b64 オプションを使用できます。
- アーカイブ・ファイル
アーカイブ・ファイルは、共有オブジェクトなど、通常はインポート・ファイルとオブジェクト・ファイルが入っている複合オブジェクトです。 アーカイブ・ファイルに別のアーカイブ・ファイルまたはタイプが認識されないメンバーが入っていると、ld コマンドは警告を表示して認識されないメンバーを無視します。 アーカイブ・ファイルに含まれているオブジェクト・ファイルの XCOFF ヘッダーに F_LOADONLY ビットが設定されている場合、 ld コマンドはそのメンバーを無視します。 このビットは、既存のアプリケーションをロードして実行できるように、アーカイブ・ファイルに残っている共有オブジェクトの古いバージョンを指定するために使用されます。 新しいアプリケーションは、共有オブジェクトの新バージョン、つまりアーカイブの別のメンバーとリンクします。
- 共有オブジェクト
ldコマンドの別の呼び出しによって作成される共有オブジェクトは、XCOFFヘッダーにF_SHROBJビットがセットされたオブジェクトファイルである。 共有オブジェクトは、実行時に解決される外部シンボルを定義します。 -bnso または -bnoautoimp オプションを指定すると、ld コマンドは共有オブジェクトを通常のオブジェクト・ファイルとして処理するので、ファイルが除去されているリンクは失敗します。
通常、入力として使用される共有オブジェクトは、共有オブジェクト内のシンボルが参照されている場合にのみ、出力ファイルのローダー・セクションにリストされます。 しかし、ランタイム・リンカーが使用される場合、参照されるシンボルがなくても、共有オブジェクトをリストアップしたい場合がある。 -brtl オプションを使用すると、コマンドラインでリストされた共有オブジェクトのうち、アーカイブ・メンバーでないものがすべて出力ファイルにリストされる。 システム・ローダーは、プログラム実行時にこのような共有オブジェクトをすべてロードし、共有オブジェクトがエクスポートするシンボルは、ランタイム・リンカーによって使用される可能性がある。 アーカイブのメンバーである共有オブジェクトを自動的にロードするには、アーカイブ内のインポートファイルによって自動ロードを有効にする必要があります。 自動ロードを有効にするには、ファイル形式のインポートとエクスポート-bI:と-bE:フラグ)を参照。
- インポート・ファイルとエクスポート・ファイル
インポート・ファイルは、実行時に解決するために外部シンボルを識別する ASCII ファイルです。 インポート・ファイルは、インポートされたシンボルを定義する共有オブジェクトを識別します。 システム・ローダーは、これらのシンボルを実行時に検索して解決します。 インポート・ファイルの 1 行目が #! (番号記号、感嘆符) で始まる場合は、このファイルを通常の InputFile としてコマンド・ラインで指定できます。 それ以外の場合は、-bI または -bimport オプションを使用してインポート・ファイルを指定しなければなりません。
エクスポート・ファイルは、別の実行可能オブジェクト・ファイルをインポートに使用できるようにする外部シンボルを識別する ASCII ファイルです。 エクスポート・ファイルのフォーマットは、インポート・ファイルと同じです。
- ライブラリー
- 処理中
ld コマンドは、すべての入力ファイルを、アーカイブ・ファイルであるかどうかに関係なく同様に処理します。 このコマンドは、すべてのオブジェクトのシンボル・テーブルを組み込み、既存のシンボルと重複するシンボル定義のみを廃棄します。 他のバージョンの ld コマンドとは異なり、参照が定義よりも先になるようにアーカイブ・ファイルを並べ替える必要はありません。 コマンドラインでアーカイブ・ファイルを複数回リストアップしないでください。
ld コマンド・フラグの順序は、入力オブジェクト・ファイル、ライブラリー、およびインポート・ファイルを除けば、コマンドの処理方法には影響を与えません。 これらのフラグは -L、 -f、 -l、 -bkeepfile、 -bI である。 これらのフラグは、次の順序で処理されます。
- -L フラグは、 -l フラグで指定されたライブラリを探すための検索ディレクトリのリストにディレクトリを追加する。 各ディレクトリーは指定した順序で検索されます。 -l のフラグが処理される前に、 -L のフラグがすべて処理される。
- ld コマンドは InputFile パラメータ、 -f フラグで指定されたファイル、 -l フラグで指定されたライブラリを指定された順序で処理する。
- ld コマンドは、 -bI フラグで指定されたインポート・ファイルを、他のすべてのオブジェクト・ファイルとライブラリを処理した後に、指定された順序で処理する。 オブジェクト・ファイルを処理する前にインポート・ファイルを処理する必要がある場合、 -bI フラグを付けずにインポート・ファイルを入力ファイルとして指定することができます。 この場合、インポートファイルの最初の行は#、感嘆符(
#!)の記号で始まる必要があり、インポートファイルはステップ2で説明したように他の入力ファイルと一緒に処理される。 - -bkeepfile オプションでは、ld コマンドによってガーベッジ・コレクションが行われない入力ファイルを指定します。 指定された入力ファイルが InputFile パラメータとして指定されるか、 -f フラグが指定するファイルにリストされている場合、 -bkeepfile オプションはファイル処理の順序に影響しない。 それ以外の場合、ファイルはステップ 2 で説明したように他の入力ファイルと共に順に処理されます。
-r フラグまたは -bnox オプションを指定するか、リンク中にエラーが報告されない限り、 ld コマンドが生成する出力ファイルには実行権限が設定されている。 深刻なエラーが発生した場合、または入力ファイルとして出力ファイルが指定され、何らかのエラーが発生した場合、既存の出力ファイルは上書きされない。
- シンボル
ld コマンドは、以下の事前定義シンボルを使用して特殊なアドレス・ロケーションを提供し、C 構文で
extern char name[ ]として宣言できます。 以下の表はシンボル名の説明である:項目 説明 _textプログラムの最初のロケーションを指定します。 _etextプログラムの後の最初のロケーションを指定します。 _dataデータの最初のロケーションを指定します。 _edata初期化されたデータの後の最初の位置を指定する。 _endまたはendすべてのデータの後の最初のロケーションを指定します。 これらのシンボルを使用するには、そのアドレスを指定しなければなりません。 入力ファイルがこれらのシンボルのいずれかを再定義すると、予期しない結果になる可能性があります。 コンパイラーは、関数ポインターを使用して呼び出しをインプリメントするために、追加の事前定義シンボル
_ptrglを使用します。- ガーベッジ・コレクション
デフォルトでは、ld コマンドはガーベッジ・コレクションを行い、出力ファイルの生成時に参照されない制御セクション (CSECT) を削除します。
CSECT は、コードまたはデータの非表示ユニットです。 CSECT は、他の CSECT に入っているシンボルを参照する再配置エントリー (RLD) が入っていると、その CSECT を参照します。 参照先の CSECT は、自分が参照するすべての CSECT も参照されるようにします。 さらに、CSECT にエクスポートされたシンボル、 -u フラグで指定されたシンボル、または -e フラグでエントリー・ポイントとして指定されたシンボルが含まれている場合は、その CSECT が参照されます。
シンボルが参照されず、それでも出力ファイルに必要な場合、シンボルをエクスポートしたり、-u フラグでシンボルを指定したり、ガーベッジ・コレクションを抑制できます。 ガーベッジ・コレクションを抑制するには、-r フラグまたは -bnogc オプションを使用します。 個々のオブジェクト・ファイルのためにガーベッジ・コレクションを抑制するには、 -bkeepfile オプションまたは -bgcbypass オプションを使用します。 ガーベッジ・コレクションを抑制しても、参照されない内部シンボルは削除されます。
- 無視されてサポートされないフラグ
ld コマンドの他のバージョンとの互換性を保つために、 一部のフラグは認識されますが、無視されます。 これらのフラグは、フラグとそのオペランドが無視されたことを示すメッセージを生成します。 フラグが無視されても、ld コマンドがそれ以上処理せずに終了することはありません。 次のフラグが無視されます。
-ANumber -bnostrcmpct -n -bfilelist -bstrcmpct -N -bfl -BNumber -Q -bforceimp -d -RNumber -bi -i -VNumber -binsert -j[Key:]Number -x -bnoforceimp -kKey:Path -YNumber注: ld コマンドラインに -bsvr4 オプションがある場合、 -R と -z オプションは再定義される。ld コマンドでサポートされないフラグを指定すると、エラー・メッセージが表示されます。 サポートされないフラグがすべて診断された後、ld コマンドはそれ以上処理を行わずに終了します。
フラグ
ld コマンドは、XPG ユーティリティー構文ガイドラインに準拠しています。ただし、引数 — は次のオペランドにのみ適用され、コマンド行の残りのオペランドには適用されません。 例えば、コマンド・ラインに ld --
-s -vと入力すると、 -s はファイル名として扱われ、 -v はフラグとして扱われます。 -v をファイル名として扱うには、 ld -- -s -- -v と入力します。
| 項目 | 説明 |
|---|---|
| -b Option | 特別な処理オプションを設定する。 -b フラッグを繰り返すことができる。 これらのオプションの詳細については、 Options (-b Options )を参照のこと。 |
-d [y | n] |
-dy オプションを指定すると、 ld コマンドはダイナミック・リンクを使用する。 このオプションは -b so オプションと同じである。 -dn オプションを指定すると、 ld コマンドはスタティック・リンクを使用する。 このオプションは -b nso オプションと同じである。 デフォルトのオプションは -dy です。 このオプションは、 -bsvr4 オプションを指定した場合にのみ有効である。 |
| -D 番号 | 初期化データまたは出力ファイルのデータセクションの開始アドレスを Numberに設定する。 指定された数値が - 1の場合、データセクションはテキストセクションの直後から始まる。 デフォルトでは、データセクションはロケーション 0から始まる。 -D フラグと -bpD フラグの両方が指定される場合、後者のフラグが優先されます。 注: システム・ローダーは実行時にデータ・セクションを再配置するため、指定された数は、アドレス・マップにリストされているアドレス、または dump コマンドや nm コマンドなどのユーティリティーによって印刷されるアドレスに影響します。
|
| -eLabel | 実行可能出力ファイルのエントリー・ポイントを Label に設定します。 デフォルトのエントリー・ポイントはダブル・アンダースコア start (__start) である。 |
| -f FileID | 処理する入力ファイルのリストが入っているファイルを指定します。 ファイルには FileID ファイルには、入力ファイル名のリストが含まれていなければならない。 ファイルの各行は FileID ファイルの各行は、 ld のコマンドラインに個別にリストされているかのように扱われる。 ファイル内の行には、シェル・パターン文字のアスタリスク(* )、左大括弧([ )、右大括弧(] )、クエスチョンマーク(? )を含めることができ、これらは glob サブルーチンを使って展開され、複数のオブジェクト・ファイルを指定することができる。 |
| -G | ランタイム・リンカーで使用可能な共有オブジェクトを生成する。 -G フラグを指定するのは、-b フラグと共に erok、rtl、nortllib、nosymbolic、noautoexp、および M:SRE オプションを指定するのと同じです。 以降のオプションにより、これらのオプションをオーバーライドできます。 |
| -H 番号 | 出力ファイルのテキスト、データ、ローダー・セクションは、各セクションが Number の倍数であるファイル・オフセット上で始まるように位置合わせされます。 指定された数値が 1の場合、アライメントは行われない。 指定された数値が 0の場合、ローダーセクションはワード境界にアライメントされ、テキストセクションとデータセクションは、セクション内のすべての CSECTs のアライメントを満たすように境界にアライメントされる。 デフォルト値は 0 である。指定された Numberが出力ファイル内で |
| -K | 出力ファイルのヘッダー、テキスト、データ、およびローダー・セクションを、各セクションがページ境界上で始まるように位置合わせされます。 このフラグは、 -H Numberを指定するのと同じである。 Numberは、 ld コマンドが実行されているマシンのページサイズである。 |
| -l name | libName.aファイルを処理する。 ダイナミック・モードでは、'rtlオプションで、'libName.aまたは 'libName.soファイルを処理する。 いずれの場合も、ファイルを見つけるために、 -L フラグによって指定されたディレクトリー、または標準ライブラリー・ディレクトリー (/usr/lib および /lib) 内のディレクトリーが検索されます。 rtl オプションを指定した動的モードでは、 libName.so または libName.a のいずれかを含む最初のディレクトリーが検索条件を満たします。 両方のファイルが同じディレクトリーにある場合は、 libName.so ファイルが使用されます。 このフラグは繰り返すことができます。 動的モードについて詳しくは、 ランタイム・リンクを参照してください。 注: アーカイブの読み取り時にシンボルへの参照が表示されない場合でも、シンボルの最初の定義は保持されます。 その他のバージョンの ld コマンドでは、アーカイブの読み取り時にシンボルへの参照が表示されない場合、アーカイブに定義されているシンボルは無視されます。
|
| -L ディレクトリー | -l フラグで指定されたライブラリの検索に使われる検索ディレクトリのリストに Directory を追加する。 -blibpath、 -bnolibpath、または -bsvr4 オプションを使用しない限り、ディレクトリーのリスト (標準ライブラリー・ディレクトリーを含む) は、システム・ローダーが使用できるように、出力オブジェクト・ファイル・ローダー・セクションにも記録されます。 このフラグは繰り返すことができます。 |
| -m または -M | 出力ファイルを作成するために処理されるすべてのファイルおよびアーカイブ・メンバーの名前を標準出力にリストします。 共有オブジェクトとインポート・ファイルはリストされません。 |
| -o name | 出力ファイル Name を指定します。 デフォルトでは、出力ファイル名は a.out です。 |
| -r | 別の ld コマンド呼び出しで入力ファイルとして使用する、実行不能出力ファイルを生成します。 このファイルには、未解決のシンボルが含まれている場合もあります。 -r フラグは、 erok、 noglink、 nox、および nogc オプションを -b フラグと一緒に指定することと同等です。 (以降のオプションにより、これらのオプションをオーバーライドできます。) |
| -R Path | ランタイム・リンカーにライブラリーの検索ディレクトリーを指定するために使用する、コロンで区切られたディレクトリーのリストを定義する。 -bsvr4 オプションが ld コマンド・ラインに指定されているときにのみ有効です。 Pathが存在しNULLでない場合、出力ファイルのローダーセクションに記録され、実行時に共有ライブラリーと実行ファイルをリンクするときに使用される。 このオプションの複数インスタンスは、コロンで分離された各 Path に連結されます。 |
| -s | シンボル・テーブル、行番号および再配置情報を、出力ファイルの作成時に除去します。 除去することによって、スペースは節約されますが、デバッガーが使用できなくなります。 strip コマンドを使用して、既存の実行可能ファイルを除去することもできます。 注: 非共有オブジェクトは、ストリップされている場合はリンクできません。 共有オブジェクトは除去できますが、除去された共有オブジェクトは静的リンク時には使用できません。
|
| -S 番号 | 出力実行可能プログラム・ファイルを実行するときに、ユーザー・スタックに許される最大サイズをバイト単位で設定する。 この値は補助ヘッダーに保存され、 soft ulimitを設定するためにシステム・ローダーによって使用されます。 デフォルト値は 0 である。 大規模ユーザー・スタックおよび 32 ビット・プログラムについて詳しくは、「 プログラミングの一般概念 」トピックの「 大規模プログラム・サポート 」を参照してください。 |
| -T 番号 | 出力ファイルのテキスト・セクションの開始アドレスを Number に設定します。 デフォルト値は 0 である。 -T フラグと -bpT フラグの両方が指定される場合、後者のフラグが優先されます。 注: システム・ローダーは実行時にテキスト・セクションを再配置するため、指定された数は、アドレス・マップにリストされているアドレス、または nm や dump コマンドなどのユーティリティーによって印刷されるアドレスに影響します。
注意 Number が
0x1000xxxxxxx で、リンクされているプログラムが 64 ビットプログラムである場合、システムローダは、アドレス 0x10000000000 のセグメントから始まるメモリに実行テキストをロードします。 |
| -u name | 外部シンボル Nameのガベージコレクションを防ぐ。 指定したシンボルが存在しなければ、警告メッセージが表示されます。 このフラグは繰り返すことができます。 |
| -v | バインダー・コマンドの実行に関する追加情報を loadmap ファイルに書き込みます。 |
| -V | ld コマンドのバージョン文字列を標準エラー(stderr)に書き込む。 |
| -z | -z フラグは、 -b svr4 オプションがない場合、 -K フラグと同じ働きをする。 |
| -z defs | リンクの末尾に未定義のシンボルが残っている場合、強制的に回復不可能なエラーとなる。 このオプションは、実行可能ファイルがビルドされるときのデフォルトです。 また、これは、共有ライブラリーを作成する際に、 オブジェクトが必要なものを完備していること、すなわち、 そのシンボル参照のすべてが内部的に解決されることを確認するのに役立ちます。 このオプションは -b svr4 オプションが指定されているときにのみ有効です。 これは、 -b ernotok オプションと同等です。 |
| -z nodefs | 未定義シンボルを許可します。 このオプションは、共有ライブラリーがビルドされるときのデフォルトです。 実行可能ファイルで使用される場合、そのような未定義シンボルへの参照の動作は指定されません。 このオプションは -b svr4 オプションが指定されているときにのみ有効です。 これは、 -b erok オプションと同等です。 |
| -z multidefs | 複数のシンボル定義を許可します。 再配置可能なオブジェクト( .o ファイル)間で発生する複数のシンボル定義は、デフォルトでは回復不可能なエラー状態になる。 このオプションはエラー条件を抑制し、 最初のシンボル定義が行われるのを許可します。 このオプションは -b svr4 オプションが指定されているときにのみ有効です。 |
| -z text | .text セクションに対する再配置がダイナミック・モードのみのままであれば、強制的に回復不可能なエラーとなる。 このオプションは -b svr4 オプションが指定されているときにのみ有効です。 |
| -z nowarntext | ダイナミックモードのみ、 .text セクションを含む、マッピング可能なすべてのセクションに対する再配置を許可する。 このオプションは、共有ライブラリを構築するときのデフォルトである。 このオプションは -b svr4 オプションが指定されているときにのみ有効です。 |
| -z warntext | .text セクションに対する再配置がダイナミックモードのみのままである場合に警告する。 このオプションは、実行ファイルをビルドするときのデフォルトである。 このオプションは -b svr4 オプションが指定されているときにのみ有効です。 |
| -Z ストリング | -l フラグで指定されたライブラリを検索する際、標準ライブラリ・ディレクトリの名前の頭に String を付ける。 例えば、 -Z test フラグと -lxyz フラグを指定すると、 ld コマンドは /test/usr/lib/libxyz.a ファイルと /test/lib/libxyz.a ファイルを探します。 -Z String フラグを使用すると、標準ライブラリー・ディレクトリーは検索されません。 このフラグは、出力ファイルのローダー・セクションに保管されているライブラリー・パス情報には影響しません。 このフラグは、ライブラリーの新バージョンを開発するときに便利である。 このフラグは繰り返すことができます。 |
バインダー
ld コマンドはコマンドライン引数を確認し、バインダー(デフォルトでは /usr/ccs/bin/bind ファイル)を呼び出し、生成されたバインダーのサブコマンドのリストを渡す。 バインダー・プログラムはファイルをリンクします。 バインダーは ld コマンドによって呼び出されますが、バインダーを直接開始することができます。 この場合、バインダーは標準入力からコマンドを読み取ります。
2 つのバインダー・オプションがバインダーの呼び出しに影響を与えます。 binder オプションは呼び出すバインダーを指定し、 nobind オプションは ld コマンドがバインダーを呼び出さないようにします。 その他のバインダー・オプションは、生成されるバインダー・サブコマンドに影響する。
ld 、オプションやコマンドライン引数にエラーがなければ、バインダーを呼び出す。 バインダーは、次の形式のコマンド・ラインで呼び出されます。
bind [quiet_opt] [loadmap_opt]
quiet_optのデフォルト値は quietで、 loadmap_optのデフォルト値はNULL文字列なので、デフォルトのコマンドラインは以下のようになる:
/usr/ccs/bin/bind quiet
オプション (-b オプション)
- 以下のバインダー・オプションのリストでは、 または という語で区切られた 2 つのオプション名は同義です。
- FileID はパス名を示します。 相対パス名または絶対パス名のどちらも使用できます。
- 引数が後に続く反復不能オプションの場合は、ヌル引数を使用してオプションを否定することができます。 つまり、オプションとコロンのみを指定します。
- 競合するオプションを指定した場合は、最後のものが優先される。
| 項目 | 説明 |
|---|---|
| 32 | 32 ビット・リンク・モードを指定します。 このモードでは、すべての入力オブジェクト・ファイルが XCOFF32 ファイルでなければなりません。そうでなければエラーが報告されます。 XCOFF64 アーカイブ・メンバーは無視されます。 特定のシンボルのモードを指定するインポート・ファイルまたはエクスポート・ファイルの場合、64 ビット・シンボルは無視されます。 -b32 オプションと -b64 オプションの両方を指定すると、最後に指定したオプションが使用されます。 どちらのオプションも指定しない場合、モードは環境変数 OBJECT_MODEの値から決定されます。 |
| 64 | 64 ビット・リンク・モードを指定します。 このモードでは、すべての入力オブジェクト・ファイルが XCOFF64 ファイルでなければなりません。そうでないと、エラーが報告されます。 XCOFF32 アーカイブ・メンバーは無視されます。 特定のシンボルのモードを指定するインポート・ファイルまたはエクスポート・ファイルの場合、32 ビット・シンボルは無視されます。 -b32 オプションと -b64 オプションの両方を指定すると、最後に指定したオプションが使用されます。 どちらのオプションも指定しない場合、モードは環境変数 OBJECT_MODEの値から決定されます。 |
| asis | すべての外部シンボルが大文字と小文字を区別せずに処理されます。 このオプションはデフォルトです。 すべての外部シンボルを大文字で処理する方法については、caps オプションの 説明を参照してください。 |
| aslr、aslr:[tdsmp]*、または aslr:- | プログラムのアドレス・スペース・レイアウト・ランダム化を指定します。 このオプションのみを使用する場合、 aslr オプションはすべてのランダム化属性を有効にし、 -baslr:-、ランダム化属性を無効にする。aslr オプションの後にコロンを付けると、個別の属性を有効にできます。 属性 t、 d、 s、 m、および pは、テキスト、データ、スタック、mmap、および専用ライブラリーを表します。 リストされていない属性については、ランダム化設定は無効のままです。
注: m および p 属性は、32 ビット・プログラムには指定できません。
再配置可能アドレスがテキスト・セクションにマッピングされるよう、一部のプログラムはコンパイルおよびリンクされています。 このオプションでは、プログラムの実行時にアドレスを再配置する必要があります。 ランダム化がテキストまたはデータに対して有効になっていると、これらのプログラムは失敗します。 その結果、テキストセクションの再配置が存在する場合、 aslr オプションを使用して t 属性と d 属性を明示的に指定しない限り、テキストとデータのランダム化は有効になりません。
|
| autoexp | 出力モジュールからいくつかのシンボルを自動的にエクスポートします。エクスポート・ファイルにリストする必要はありません。 (このオプションは、出力モジュールからのすべてのシンボルはエクスポートしません。 すべてのシンボルをエクスポートするには、 bexpall オプションを使用します。) このオプションがデフォルトです。 このオプションは、メイン・プログラムをリンクするときに使用する。 S で始まるモジュール・タイプ ( M または modtype オプション) を指定せず、 noentry オプションを使用しない場合、リンカーはメインプログラムをリンクすることを想定します。autoexp オプションを使用すると、コマンドラインにリストされている共有オブジェクトが特別なファイル . (dot) からシンボルをインポートし、リンクされたモジュールにそのシンボルのローカル定義が含まれている場合、そのシンボルは自動的にエクスポートされます。 rtl オプションでリンクすると、その他のシンボルも自動的にエクスポートされます。 リンクされているモジュール内で定義されているシンボルに、コマンド行にリストされている共有オブジェクトからエクスポートされた 1 つ以上の定義があり、それらの定義のいずれかが BSS シンボルである場合、そのシンボルは自動的にエクスポートされます。 リンクされているモジュール内の定義が BSS シンボルである場合、そのシンボルは nosymbolic 属性を使用してエクスポートされます。 その他の場合、シンボルは symbolic 属性でエクスポートされます。 シンボルが別のエクスポート属性でエクスポート・ファイル内にリストされる場合、明示的な属性が使用されます。 autoexpオプションでシンボルが自動的にエクスポートされるが、そのシンボルが 'list属性のエクスポートファイルにリストされている場合、そのシンボルはエクスポートされない。 |
| autoimp または so | 入力ファイルとして指定された共有オブジェクトからシンボルをインポートします。 共有オブジェクトは参照されますが、出力オブジェクト・ファイルの一部としては含まれません。 このオプションはデフォルトです。 |
| autoload: パス/ファイル (メンバー) | アーカイブ・メンバーを自動的にロードします。 |
| bigtls | 出力オブジェクトまたはプログラムのスレッドローカルストレージのサイズが64KBより大きい場合、余分なコードを生成する。 コンパイラーは、local-exec 変数または local-dynamic スレッドローカル変数への直接参照を生成するために使用される。 16 ビット・オフセットでアドレッシングできないスレッド・ローカル変数への直接参照ごとに、余分なコードが必要です。 追加のコードを含むプログラムはパフォーマンスが低下する可能性があるため、このオプションを使用するよりも、直接参照を使用するスレッド・ローカル変数の数を減らすことをお勧めします。 デフォルト・オプションは、nobigtls オプションです。 |
| bigtoc | 目次 (TOC) のサイズが 64 KB より大きい場合は、追加のコードを生成します。 余分のコードは、16 ビット・オフセットでアドレッシングできない TOC シンボルへのすべての参照に必要です。 生成されたコードを含むプログラムのパフォーマンスが低下する可能性があるため、このオプションを使用する前に、プログラムが必要とする TOC エントリーの数を減らしてください。 デフォルトは nobigtoc オプションです。 このオプションを使用すると、 glink ファイル /usr/lib/glinkl.o が 32 ビット・モードで使用され、 /usr/lib/glinkl64.o が 64 ビット・モードで使用されます。 |
| bimpctr | 呼び出し関数と同じモジュールで定義された呼び出し関数が、呼び出し位置から32MB以上のオフセットにあるような大規模な64ビット実行可能オブジェクトファイルにおける関数呼び出しのパフォーマンスを最適化します。 このオプションは、テキストの原点を示す'-bpTフラグが指定され、テキストの'aslrオプションが有効でない場合にのみ機能する。 |
| bimpptrgl | 呼び出される関数がターゲット関数として'_ptrglシンボルを必要とし、'_ptrglシンボルの定義が呼び出し位置から32MB以上のオフセットにある場合、大規模な64ビット実行可能オブジェクトファイル内の関数呼び出しのパフォーマンスを最適化する。 関数呼び出しは、関数ポインタを使うか、呼び出される関数が呼び出される関数とは別のモジュールで定義されている場合に行われる。 このオプションは、コンパイラー・フラグ '-qnoinlglueが指定されている場合にのみ機能する。 |
| bindcmds:FileID | ld コマンドによって生成されたバインダー・コマンドのコピーを FileIDに書き込みます。 結果のファイルは、バインダー・プログラムが独立型プログラムとして呼び出されるときに、バインダー・プログラムへの標準入力としてリダイレクトすることができます。 デフォルトでは、ファイルは作成されません。 |
| binder:FileID | ld コマンドによって呼び出されるバインダーとして FileID を使用します。 デフォルトのバインダーは /usr/ccs/bin/bind ファイルです。 |
| bindopts:FileID | バインダー・プログラムの引数のコピーを FileID に書き込みます。 結果のファイルを使用して、バインダー・プログラムを独立型プログラムとして開始することができます。 デフォルトでは、ファイルは作成されません。 |
| C:FileIDまたは 'calls:FileID | 出力オブジェクト・ファイルのアドレス・マップを FileIDに書き込みます。 シンボルはセクション別にソートされてから、アドレス別にソートされます。 マップにリストされるシンボルごとに、シンボルから他のシンボルへの参照がリストされます。 デフォルトでは、ファイルは作成されません。 calls オプションについて詳しくは、 アドレス・マップを参照してください。 |
| caps | すべての外部シンボルを大文字で処理します。 デフォルトは asis オプションです。 |
| cdtors[: [incl] [: [nnn] [:order]]] | リンカーは C++ 静的コンストラクターまたはデストラクター関数に関する情報を収集し、この情報を出力ファイルに保存します。 incl サブオプションは、保存情報を作成するときに、どのアーカイブ・メンバーを検索するかをリンカーに伝えます。 可能な値は以下のとおりです。
nnn サブオプションは、出力モジュールの優先順位を指定します。 プログラムが複数のモジュールを同時にロードする場合は、 nnn サブオプションを使用して、モジュールが初期設定される順序を制御します。 (出力ファイルがプログラムであり、共有オブジェクトでない場合、この優先順位は無視されます)。 指定可能な優先順位の範囲は、-2 31 から 231-1 です。 デフォルトの優先順位は 0 です。 -2'31から '-2'31+1023の範囲の値は、C++実行時の初期化用に予約されている。 order サブオプションは、優先順位が同じすべての関数に対して、個別のコンストラクターまたはデストラクター関数が呼び出される順序を指定します。 可能な値は以下のとおりです。
このオプションは複数回指定できますが、最後に指定されたサブオプションが使用されます。 未指定のサブオプションは、現行値またはデフォルト値に影響しません。 例えば、 -bcdtors:csect:20:s -bcdtors:::r は、 -bcdtors:csect::20:rと同じです。 デフォルトは -bnocdtorsです。 -bcdtors が指定されている場合は、 -bcdtors:all:0:sと同じです。 注:
|
| comprld または crld | 同じアドレスにある複数の再配置エントリー (RLD) を、可能であれば結合して単一の RLD にします。 このオプションはデフォルトです。 |
| cror15 | cror 15,15,15 (0x4def7b82) 命令を、呼び出し命令の後に続く特殊なノーオペレーション命令として使用します。 デフォルト値は ori 0, 0,
0 (0x60000000) です。 nop オプションを参照してください。このオプションは、AIX 3.11で再リンクするシステムの現在のレベルでオブジェクト・ファイルをリンクするときに使用する。 |
| cror31 | cror 31,31,31 (0x4ffffb82) 命令を、呼び出し命令の後に続く特殊なノーオペレーション命令として使用します。 デフォルト値は ori 0, 0,
0 (0x60000000) です。 nop オプションを参照してください。このオプションは、 AIX 3.2で再リンクする予定のシステムの現行レベルでオブジェクト・ファイルをリンクする場合に使用します。 |
| D: Number [/dsa] または maxdata:Number[/dsa] | 実行プログラムの実行時に、ユーザー・データ領域またはユーザー・ヒープに許容される最大サイズをバイト単位で設定する。 この値は補助ヘッダーに保管され、必要に応じてシステム・ローダーがソフト・データ制限を増やすために使用します。 デフォルト値は 0 です。 このオプションを使用すると、ユーザー・データ領域用に指定したバイト数が予約されます。 shmat 関数または mmap 関数を使用すると、プログラムがユーザー・データ領域用に予約された仮想アドレスに明示的にオブジェクトをマップしない場合があります。 32 ビット・プログラムの場合、システムで許可される最大値は、大規模プログラム・サポートの下で実行されるプログラムの場合は 0x06FFFFFFFFFFFFF8 を超えて拡張することはできません。 |
| datapsizeの場合:psize | データの psize ページ・サイズ (バイト単位) を要求します。 この値は、10 進数、16 進数、または 8 進数で指定できます。 数値の指定は、C プログラミング言語の場合と同じです。 また、ページ・サイズは、数値の後に 1 文字の接尾部を付けて指定できます。
-b datapsize:16k または -b datapsize:0x4000 のいずれかがデータとして 0x4000 を要求し、 XCOFF ヘッダーに F_VARPG ビットを設定します。 |
| dbg:Option または debugopt:Option | 特殊デバッグ・オプションまたは制御オプションを設定します。 デフォルトでは、デバッグ・オプションは設定されません。 dbg:loadabs または debugopt:loadabs オプションは、出力プログラムが -T および -D フラグで指定したのと同じアドレスにロードされることを示すために使用します。 この場合、分岐絶対命令は、そのターゲットが再配置可能なシンボルであっても、(相対) 分岐命令には変更されません。 また、分岐命令が分岐絶対命令に変更されることもありません。 |
| delcsect | CSECT 内のシンボルが以前に読み込んだオブジェクト・ファイルで定義されている場合、CSECT 内のすべてのシンボルを削除します。 このオプションを指定すると、同じ関数の複数のインスタンスが同じプログラム内に存在するのを防止できます。 例えば、'a.oファイルが関数 'a() を定義し、'b.oファイルが関数 'a()と 'b() を定義している場合、'a.oと 'b.o'-bdelcsectオプションでリンクすると、'b.o からシンボル 'a()と 'b()が削除される。 したがって、 a() の 2 つのインスタンスは存在しません。 デフォルトは nodelcsect オプションです。 |
| dynamic または shared | リンカーに、以降の共有オブジェクトを動的モードで処理させます。 このオプションはデフォルトです。 動的モードでは、共有オブジェクトは出力ファイルに静的には組み込まれません。 代わりに共有オブジェクトは、出力ファイルのローダー・セクションにリストされます。 rtl オプションを指定し、ダイナミック・モードが有効な場合、 .so と .a で終わるファイルは、 -l フラグで指定されたライブラリの検索を満たす。 両方が有効な場合、同じディレクトリーに存在すると、 .a ではなく .so が優先されます。 rtl オプションを指定し、静的モードが有効な場合、 .a で終わるファイルが処理されます。 |
| E:FileIDまたは 'export:FileID | ファイル FileIDにリストされている外部シンボルをエクスポートします。 エクスポートされたシンボルは、出力ファイルのローダーセクションにリストされる。 デフォルトのエクスポート・ファイルはありません。 svr4オプションを使用する場合、'E:FileIDオプションは 'expallまたは 'expfullオプションをキャンセルする。 |
| ernotok または f | 未解決の外部参照がある場合はエラーが報告される。 このオプションはデフォルトです。 |
| erok | 未解決の外部参照があってもエラーを出さずに、出力オブジェクト・ファイルを作成します。 デフォルトは ernotok オプションです。 |
| errmsg | メッセージのエラー・レベルが halt オプションの値以上で、 quiet オプションが使われているか、標準出力がリダイレクトされている場合、エラー・メッセージを標準エラーに書き込む。 このオプションはデフォルトです。 |
| ex1:FileID、'ex2:FileID、'ex3:FileID、'ex4:FileID、'ex5:FileID | 通常のバインダー・サブコマンド・シーケンス内にユーザー出口を提供します。 が指定するファイルには、次のように実行されるバインダー・サブコマンドのリストが含まれていなければならない。 FileID が指定するファイルには、以下のように実行されるバインダー・サブ・コマンドのリストが含まれていなければならない:
|
| expall | インポートされたシンボル、アーカイブ・メンバで定義されている参照されないシンボル、およびアンダースコア (_) で始まるシンボルを除くすべてのグローバル・シンボルをエクスポートします。エクスポート・ファイルにシンボルをリストするか、 expfull オプションを使用することで、さらに多くのシンボルをエクスポートできます。 このオプションは、 autoexp オプションがエクスポートするシンボルには影響しない。 このオプションを使用する場合、エクスポートファイルを使用することでこの例外を回避できるかもしれません。 しかし、エクスポート・ファイルを使用することで、エクスポートされるシンボルを明確に制御することができます。 これにより、他の共有オブジェクトからエクスポートされる名前との衝突を心配することなく、共有オブジェクト内で他のグローバルシンボルを使用することができる。 デフォルトは noexpallです。 |
| expfull | インポートされたシンボルと、アーカイブ・メンバが使用されていないときにアーカイブ・メンバで定義されたシンボルを除く、すべてのグローバル・シンボルをエクスポートする。 -bexpall オプションとは異なり、 -bexpfull オプションは、下線 (_) で始まるシンボルをエクスポートし、そのシンボルのモジュール・エントリー・ポイントもエクスポートします。 -bexpfull オプションの実際の動作は、特定のユース・ケースとランタイム・リンカーの構成によって異なる場合があります。 -bexpfull オプションは、 autoexp オプションによってエクスポートされるシンボルには影響しません。 -b フラグとともに svr4 オプションを使用しない限り、デフォルト値は noexpfull です。 |
| export:FileID | E:FileID オプションと同じように機能します。 |
| f | ernotok オプションと同じように機能します。 |
| forceimprw | インポートされたシンボルへの参照を含む、読み取り専用の CSECTs を強制的に読み取りまたは書き込みにする。 デフォルトは noforceimprw である。 |
| forkpolicy:ポリシー | 64ビット・プログラムをリンクするときに、XCOFF補助ヘッダーの _AOUT_FORK_POLICY および _AOUT_FORK_COR フラグを設定する。 policyが corの場合、 _AOUT_FORK_COR フラグも設定され、プログラム実行時にコピーオンリファレンス・フォークツリー・ポリシーの使用を要求する。 ポリシーが カウの場合、 _AOUT_FORK_COR flag がリセットされ、プログラム実行時にコピーオンライトフォークツリーポリシーの使用が要求される。 32 ビット・プログラムをリンクする場合、このフラグは無視されます。 デフォルト値は noforkpolicy。 |
| gc | ガーベッジ・コレクションを実行します。 一部またはすべてのオブジェクト・ファイルに関してガーベッジ・コレクションを禁止するには、nogc、gcbypass、keepfile オプションを使用します。 このオプションはデフォルトです。 |
| gcbypass: Number | gc オプションが指定されている場合に、ガーベッジ・コレクション時にバイパスするファイルの数を指定します。 nogc オプションを使用すると、このオプションは無視されます。 Numberが 0の場合、このオプションは gc オプションと同等で、すべてのファイルに対してガベージ・コレクションが実行される。 デフォルト値は 0 である。 |
| glink:FileID または glink=large または glink=small | FileID のグローバル・リンケージ・プロトタイプ・コードを利用する を指定する。 グローバル・リンケージ・インターフェース・コードは、インポートされた関数または未定義の関数に対して生成されます。 32 ビット・モードでは、デフォルトは /usr/lib/glink.o ファイル、または bigtoc オプションが使用されている場合は /usr/lib/glinkl.o です。 64ビット・モードでは、デフォルトは'/usr/lib/glink64.oファイルであり、'bigtocオプションが使用されている場合は'/usr/lib/glinkl64.oファイルである。 また、'glink=largeで32ビットモードの'/usr/lib/glinkl.oと64ビットモードの'/usr/lib/glinkl64.oを指定したり、'glink=largeで以前の'glinkオプションを上書きすることもできる。 |
| h:Number または halt:Number | バインダー・コマンド処理を継続するための最大エラー・レベルを指定します。 デフォルト値は 4です。 どのバインダー・サブコマンドも戻り値が Numberより大きい場合、追加のバインダー・サブコマンドは処理されない。 停止レベル値が 8 以上の場合、出力ファイルが生成されると、その出力ファイルは実行可能ファイルではない可能性があります。 以下はその返り値である:
|
| I:FileID または import:FileID | FileID にリストされているシンボルをインポートする。 デフォルトのインポート・ファイルはありません。 |
| initfini:[ Initial] [:Termination] [:Priority] | Initial は初期化ルーチン、 Termination は終了ルーチン、 Priority は符号付き整数で、 -2、147、483、648 から 2、147、483、647 までの値。 「初期」 と 「終了」の少なくとも 1 つを指定し、 「終了」 と 「優先順位」の両方を省略する場合は、 「初期」 の後のコロンも省略する必要があります。 「優先順位」を指定しない場合、 0 がデフォルトです。 このオプションは繰り返すことができます。 このオプションは、優先順位でルーチンをソートします。最も優先度の低い (最もネガティブな) ルーチンから開始します。 初期化ルーチンを順番に開始し、終了ルーチンは逆順に開始する。 このオプションは、同じ優先順位のルーチンを不特定の順番で開始する。 複数の initfini ・オプションが同じ優先度を指定し、初期化ルーチンと終了ルーチンの両方を指定した場合、ルーチンの相対的な順序が保持される。 例えば、オプション initfini:i1:f1 と initfini:i2:f2 を指定した場合、関数 i1 と i2 は不特定の順番で開始されるが、モジュールがロードされたときに i1 が i2 よりも先に開始されると、モジュールがアンロードされたときに f2 が f1 よりも先に開始される。 注:
|
| ipath | コマンド・ラインにリストされた共有オブジェクトの場合、出力ファイルのローダー・セクション内に共有オブジェクトをリストするとき、-l フラグを指定するのではなくパス・コンポーネントを使用します。 このオプションはデフォルトです。 |
| keepfile:FileID | のガベージコレクションを防ぎます。 FileID. デフォルトでは、バインダーはすべてのファイルで参照されていない CSECTS を削除する。 このオプションは繰り返すことができます。 |
| lazy | モジュールの依存モジュールの遅延ロードを有効にする。 このオプションは、他のフラグおよびオプションの後に -lrtl オプションを追加します。 -brtl オプションを指定すると、-blazy オプションは無視され、遅延ロードは使用可能にはなりません。 モジュールがリンクされると、依存モジュールのリストがモジュールのローダーセクションに保存される。 モジュールがロードされた後で、システム・ローダーは自動的に依存モジュールをロードします。 遅延ロードが使用可能である場合、モジュール内で最初に関数が呼び出されるまで、いくつかの依存に対するロードが延期されます。 モジュールへのすべての参照が関数呼び出しである場合、モジュールは遅延ロードされます。 モジュール内の変数が参照される場合、モジュールは通常の方法でロードされます。 注: 遅延ロードを使用する場合は、関数ポインターを比較する際に注意してください。 通常、2 つの関数ポインターを比較して同じ関数を参照するかどうかを決定するために、関数は固有のアドレスを持ちます。 遅延ロードを使用してモジュールをリンクする場合、遅延ロード・モジュール内の関数のアドレスは、他のモジュールによって計算されるアドレスと同じではありません。 関数ポインターの比較に依存するプログラムでは、遅延ロードを使用してはなりません。
遅延ロードについて詳しくは、 共有ライブラリーと遅延ロードを参照してください。 |
| l:FileID または loadmap:FileID | 各バインダーのサブコマンドとその結果を FileID に書き込む。 デフォルトでは、ファイルは作成されません。 |
| lgloadtoadd: type1 [ :type2 ]..[ :typeN ] | オプション -qpic=large 付きでコンパイルされたプログラムにおいて、ロード命令から即値加算命令または即値ロード命令への変換を制御します。 異なるタイプのシンボルに対する変換は、そのタイプを指定することで制御できる。 type オプションには以下の値があります:
記号の種類をコロン( 注:
text タイプのシンボルに対する変換は、注意して有効にしてください。 -bpT:と '-bpD:オプションを、テキスト・セグメントとデータ・セグメントのロード時間アドレスと一致するように設定する。 リンク時のアドレスとロード時のアドレスが不一致の場合、予期せぬ動作が起こる可能性がある。
|
| 項目 | 説明 |
|---|---|
| libpath: Path | 出力ファイルのローダー・セクションを記述する際に、 Pathをライブラリ・パスとして使用する。 -l フラグで指定されたライブラリを検索する場合、 パスの有効性はチェックされず、使用されません。 Path は、 -L フラグの使用時に生成されるすべてのライブラリー・パスをオーバーライドします。 -L フラグを指定しないか、または nolibpath オプションを指定すると、デフォルトのライブラリー・パス情報が出力ファイルのローダー・セクションに書き込まれます。 デフォルトのライブラリー・パス情報は、 LIBPATH 環境変数が定義されている場合はその値、定義されていない場合は /usr/lib:/libの値です。 |
| llu | 実行可能ファイルをライブラリ更新機能(LLU)対応としてマークします。 |
| loadmap:FileID | l:FileID オプションと同じように機能します。 |
| lpdata | 実行可能ファイルの XCOFF ヘッダーに F_LPDATA ビットを設定します。 このビットが設定されると、このプロセスでは、そのデータ用にラージ・ページが要求されることになります。 |
| M:ModuleType または modtype:ModuleType | オブジェクト・ファイルに、2 文字のモジュール・タイプ・フィールドと共有オブジェクト・フラグを設定します。 バインダーはモジュールタイプをチェックしないが、以下の値のいずれかに設定されていなければならない:
|
| map:FileID または R:FileID | 出力オブジェクト・ファイルのアドレス・マップを FileID に書き込みます。 シンボルはセクション別にソートされてから、アドレス別にソートされます。 デフォルトでは、ファイルは作成されません。 map オプションについて詳しくは、 アドレス・マップを参照してください。 |
| maxdata:番号[/dsa] | D:Number[/dsa] オプションと同じように機能します。 |
| maxstack: Number または S:Number | -S フラグと同じように機能します。 |
| modtype:ModuleType | M:ModuleType オプションと同じように機能します。 |
| nl または noloadmap | バインダーサブコマンドとその結果をロードマップファイルに書き込まない。 このオプションはデフォルトです。 |
| noaslr | コマンド・ラインにある直前の aslr オプションの効果を取り消します。 |
| noautoexp | シンボルの自動エクスポートを防ぐ。 デフォルトは autoexp オプションです。 |
| noautoimp または nso | ストリップされていない共有オブジェクトを、通常のオブジェクト・ファイルとしてリンクします。 このオプションを使用すると、共有オブジェクトのローダー・セクションは使用されません。 デフォルトは autoimp または so オプションです。 注: これらのフラグのいずれかを使用すると、共有オブジェクト・ファイルをアプリケーションに静的にリンクすることができます。 静的にリンクされたアプリケーションは、どのフィックスまたはリリース・レベルからも他のフィックスまたはリリース・レベルにもバイナリー・ポータブルではありません。
|
| nobigtls | コンパイラーがスレッド・ローカル変数への直接参照を生成した場合、さらにスレッド・ローカル・ストレージのサイズが 64 KB より大きいために、変数の 1 つに対する再配置によりオーバーフローが発生した場合、重大エラー・メッセージを生成します。 出力ファイルが作成された場合は、正しく実行されません。 nobigtls オプションはデフォルト・オプションです。 |
| nobigtoc | TOC のサイズが 64 KB より大きい場合、重大エラー・メッセージを生成します。 出力ファイルが作成された場合は、正しく実行されません。 このオプションはデフォルトです。 |
| nobind | バインダーを呼び出しません。 その代わり、 ld コマンドは、生成されたバインダーのサブコマンドのリストを標準出力に書き出す。 デフォルトでは ld コマンドがバインダーを呼び出します。 |
| nocdtors | 静的コンストラクターまたはデストラクター関数を収集しません。 このオプションはデフォルトです。 |
| nocomprld または nocrld | 同じアドレスにある複数の再配置エントリー (RLD) を組み合わせて単一の RLD にしません。 デフォルトは comprld または crld オプションです。 |
| nodelcsect | CSECT 内の一部のシンボルを、以前に読み込まれたオブジェクト・ファイル内で定義していても、シンボルの解決中にその CSECT 内のすべてのシンボルが検討されるようにします。 詳細については、delcsect オプションの説明を参照してください。 nodelcsect オプションはデフォルトです。 |
| noexpall | エクスポートファイルにリストされているか、 autoexp オプションを使用してシンボルをエクスポートしない限り、シンボルはエクスポートされません。 このオプションはデフォルトです。 |
| noexpfull | エクスポートファイルにリストされているか、 autoexp オプションを使用してシンボルをエクスポートしない限り、シンボルはエクスポートされません。 svr4 オプションを使用しない限り、このオプションがデフォルトです。 |
| noentry | 出力ファイルにエントリー・ポイントがないことを示します。 必要なシンボルを保持するには、-u フラグまたはエクスポート・ファイルで指定します。 また、-r フラグ、nogc オプション、または gcbtpass オプションを使用すると、一部またはすべてのオブジェクト・ファイル内で、すべての外部シンボルを保持できます。 noentry または nox オプションを使用せず、エントリー・ポイントが見つからなかった場合、警告が発せられる。 svr4 オプションを使用すると、この警告は抑止されます。 |
| noerrmsg | エラー・メッセージを標準エラーに書き込みません。 noquiet オプションを指定して、標準出力をパイプを通して tee や pg などのコマンドに入力している場合、このオプションを使用します。 |
| noforceimprw | 読み取り専用の CSECTs で、インポートされたシンボルを参照できるようにする。 このオプションはデフォルトです。 |
| noforkpolicy | 64ビットプログラムをリンクするときに、XCOFF補助ヘッダーの _AOUT_FORK_POLICY および _AOUT_FORK_COR フラグをクリアする。 VMM_CNTRL 環境変数でforktreeポリシーを指定しない限り、デフォルトのforktreeポリシーが使用される。 32 ビット・プログラムをリンクする場合、このフラグは無視されます。 このオプションはデフォルトです。 |
| nogc | ガーベッジ・コレクションを防止します。 グローバル・シンボルを含むすべてのオブジェクト・ファイルの CSECTs は、参照されているかどうかにかかわらず保持されます。 デフォルトは gc オプションです。 |
| noglink | ld コマンドがグローバル・リンケージ・コードを挿入しないようにします。 デフォルトでは、バインダーはグローバル・リンケージ・コードを挿入します。 |
| noipath | コマンド・ラインにリストされる共有オブジェクトの場合、出力ファイルのローダー・セクションに共有オブジェクトをリストするときには、-l フラグで指定するのではなく、ヌル・パス・コンポーネントを使用します。 -l フラグで指定された共有オブジェクトには、常にヌル・パス・コンポーネントが使用されます。 このオプションでは、インポート・ファイル内で #! で始まる行を使用するのでパス・コンポーネントの指定への影響はありません。 デフォルトは ipath オプションです。 |
| nolibpath | -L フラグによって生成された、または libpath オプションによって指定された、以前のライブラリー・パスをオーバーライドします。 代わりに、デフォルトのライブラリー・パス情報が、出力ファイルのローダー・セクションに書き込まれます。 デフォルトのライブラリー・パス情報は、LIBPATH 環境変数が定義されている場合はその値であり、定義されていない場合は /usr/lib:/lib です。 |
| nollu | 実行可能ファイルをライブラリ更新機能(LLU)に対応していないものとしてマークします。 |
| noloadmap | nl オプションと同じように機能します。 |
| nolpdata | 実行可能ファイルの XCOFF ヘッダー内の F_LPDATA ビットをクリアします。 このビットが設定されない場合は、このプロセスでは、そのデータ用にスモール (通常) ページが使用されることになります。 |
| nom | 出力ファイルの作成に使用されるオブジェクト・ファイルをリストアップしない。 このオプションを指定すると、-m フラグがオーバーライドされます。 このオプションはデフォルトです。 |
| noobjreorder | 深さ優先の CSECT 並べ替えロジックは使用しない。 出力ファイル内の CSECTs は、以下を除き、コマンドラインで指定されたオブジェクト・ファイルやライブラリー・ファイルと同じ順序で並んでいる:
noobjreorder オプションおよび noreorder オプションを同時に指定した場合は、noreorder オプションが優先されます。 デフォルトは reorder オプションです。 |
| noorder_file | シンボルを指定された順序でマップしません。 このフラグは、前回の -border_file フラグの効果を否定します。 このオプションはデフォルトです。 |
| nop:ポップ | ローカル・ルーチンへの分岐後に使用されるノーオペレーション命令を指定します。 Nop には、特殊な値 cror15、cror31、ori または 8 桁の 16 進数を使用できます。 デフォルトは ori 命令です。 -bnop:cror15 オプションを指定するのは、-bcror15 オプションを指定するのと同じことです。また、-bnop:cror31 オプションを指定するのは、-bcror31 オプションを指定するのと同じことです。 特殊な nop オプションの 1 つを指定すると、前のすべての nop オプションがオーバーライドされます。 Nop が 8 桁の 16 進数であれば、任意の機械命令を指定します。 この機械命令は、以前に Nop 命令に対して指定した特殊な値をオーバーライドされます。 この形式を使用すると、このオプションは繰り返すことができます。 最後に指定されるマシン・インストラクションは、モジュール内ブランチの後にバインダーによって生成される命令です。 他の指定された機械命令は、ノーオペレーション命令として再編成されますが、望ましいノーオペレーション命令に変換されます。 |
| noplugin_opt | これは、plugin_opt オプションで指定されている以前のプラグイン・オプションをすべて廃棄します。 |
| noquiet | 各バインダー・サブコマンドとその結果を標準出力に書き出します。 デフォルトは quiet オプションです。 |
| noreorder | すべてのXMC_TC(TOCアドレス定数)とXMC_TD(TOC変数) CSECTs を結合してデータセクションに配置し、すべてのBSSシンボルを結合してbssセクションに配置する以外は、 CSECTs の順序を変更しない。 その他の CSECTs はすべてテキストセクションに置かれるため、出力ファイルではテキストとデータが混在する。 noreorder オプションを使用すると、出力ファイルのテキスト・セクションが位置に依存しなくなる可能性があり、テキスト・セクションが位置に依存しない場合、システム・ローダーはモジュールをロードしない。 したがって、プログラムおよびカーネル・エクステンションにはこのオプションを使用しないでください。 noobjreorder オプションおよび noreorder オプションを同時に指定した場合は、noreorder オプションが優先されます。 デフォルトは reorder オプションです。 |
| nortl | 出力ファイルの実行時リンクを使用不可にします。 このオプションは、nortllib オプションと nosymbolic- オプションを暗黙指定します。 さらに、 rtl オプションで説明されている追加のアクションは実行されません。 このオプションは、 svr4 オプションが使用されていない場合のデフォルトです。 |
| nortllib | ランタイム・リンカーへの参照を含まない。 メインプログラムがこのオプションでリンクされている場合、プログラムによって使用される共用モジュールがリンクされる方法に関係なく、プログラム内でランタイム・リンクは行われません。 このオプションは、 svr4 オプションが使用されていない場合のデフォルトです。 |
| norwexec | システムの sed_config 設定がオフでない場合、プロセスのプライベート・データ領域に実行権限がないことを指定する。 |
| noshrsymtab | 出力オブジェクトに _AOUT_SHR_SYMTAB フラグが設定されるのを防ぐ。 このオプションはデフォルトの状態です。 |
| nostabsplit | デバッグ・セクションが .stab 拡張子により代替出力ファイルに書き込まれないようにします。 このオプションがデフォルト設定です。 |
| nostrip | ストリップされた出力ファイルを生成しません。 シンボルテーブルと再配置情報は出力ファイルに書き込まれる。 このオプションを指定すると、-s フラグがオーバーライドされます。 このオプションはデフォルトです。 |
| nosymbolic | 明示的な属性なしでエクスポートされる多くのシンボルに、nosymbolic 属性を割り当てます。 詳しくは、 エクスポートされたシンボルの属性を参照してください。 デフォルトは、nosymbolic- オプションです。 |
| nosymbolic- | 明示的な属性なしでエクスポートされる多くのシンボルに、nosymbolic- 属性を割り当てます。 詳しくは、 エクスポートされたシンボルの属性を参照してください。 このオプションはデフォルトです。 |
| notextro または nro | 出力オブジェクトファイルのテキストセクションにロード時の再配置エントリーがないことを確認しない。 このオプションはデフォルトです。 |
| notmprelname | バインダーは、一般的なインスタンスを検査しません。 注: このオプションは、32 ビット・モードの場合にのみ必要です。 64 ビット・オブジェクトをビルドする場合、このオプションは無視されます。
|
| notypchk | 外部関数呼び出しの間で関数パラメーターのタイプを検査しません。 デフォルトは typchk オプションです。 |
| nov | 付加情報をロード・マップ・ファイルに書き込みません。 このオプションはデフォルトで、-v フラグをオーバーライドします。 |
| noweaklocal | 通常の検索順序を使用して弱いシンボルを解決します。 このオプションを指定すると、weaklocal オプションがオーバーライドされます。 これはデフォルト・オプションです。 |
| nox | 出力ファイルを実行ファイルにしない。 補助ヘッダーもローダー・セクションも書き込まれません。 補助ヘッダーまたはローダー・セクションに書き込まれる値を指定するフラグおよびオプションは、このオプションが使用されても効果はありません。 デフォルトは x オプションです。 |
| nro | notextro オプションと同じように機能します。 |
| nso | noautoimp オプションと同じように機能します。 |
| order_file:FileID | FileID にリストされたシンボルを指定された順序でマップします。 ファイルにリストされているシンボルは、同じストレージ・マップ・クラスの他のシンボルの前にマップされます。 ファイルで指定される関数名はドットで開始される必要があります。ドットのない関数名は関数ディスクリプターを指示するからです。 order_fileフォーマットファイルの詳細については、'order_fileフォーマットのセクションを参照のこと。 |
| order:仕様 | 出力ファイルでいくつかのシンボルがマップされる順序を制御します。 指定は以下のとおりです。
|
| pD:起点 | データセクションの先頭を含むファイルページの最初のバイトのアドレスとして Originを指定する。 例えば、データ・セクションがオブジェクト・ファイル内のオフセット 0x22A0 で始まり、 pD:0x20000000 が指定されている場合、データ・セクションの最初のバイトにはアドレス 0x200002A0が割り当てられます。 このオプションは、ページ・サイズが 4096 (0x1000) バイトであることを想定しています。注: -bpD フラグと -D フラグの両方が指定されている場合は、後者のフラグが優先されます。
|
| plugin:パス | これは、コンパイラー・プラグインの絶対パスを指定します。 通常、このオプションは必要に応じてコンパイラーによって生成されます。 以前に指定したプラグイン・パスを取り消す場合は、 -bplugin:である path 変数を指定しないでください。 入力ファイルがビットコード・ファイルであったりビットコード・ファイルを含むアーカイブであったりする場合に、プラグイン・パスが指定されていないと、ld コマンドは失敗します。 |
| plugin_opt:プラグイン-オプション | これは、コンパイラー・プラグインに渡されるオプションを指定します。 plugin_opt オプションは複数回指定できます。 通常、このオプションはコンパイラーによって生成されます。 |
| pT:起点 | テキストセクションの先頭を含むファイルページの最初のバイトのアドレスとして Originを指定する。 例えば、テキスト・セクションがオブジェクト・ファイル内のオフセット 0x264 で始まり、 pT:0x10000000 が指定されている場合、テキスト・セクションの最初のバイトにはアドレス 0x10000264が割り当てられます。
|
| quiet | バインダーのサブコマンドとその結果を標準出力に書き出さない。 このオプションはデフォルトです。 |
| 項目 | 説明 |
|---|---|
| R:FileID | map:FileID オプションと同じように機能します。 |
| r または reorder | save コマンド処理の一環として、 CSECTs の並び替えを行う。 リオーダープロセスは、同じストレージマッピングクラスの CSECTs を、参照の近さによって並べる。 このオプションはデフォルトです。 |
| ras | 出力モジュールの補助ヘッダーにフラグを設定し、モジュールがストレージキーセーフとリカバリーセーフの両方であることを示す。 カーネル・エクステンションをキー・セーフおよびリカバリー・セーフにする方法について詳しくは、「 Kernel Extensions and Device Support Programming Concepts 」を参照してください。 |
| rename: Symbol, NewName | 外部シンボル Symbol を NewName にリネームします。 実際には、すべてのオブジェクト・ファイル内の Symbol への定義と参照が、ファイルの処理前に NewName にリネームされたのと同じことになります。 デフォルトでは、シンボルのリネームを行いません。 |
| reorder | r オプションと同じように機能します。 |
| ro または textro | 結果のオブジェクト・ファイルのテキスト・セクションにロード時再配置項目がないことを確認します。 デフォルトは nro オプションです。 |
| rtl | 出力ファイルのランタイム・リンクを使用可能にする。 このオプションは、rtllib オプションと symbolic オプションを暗黙指定します。 ダイナミック・モードが有効な場合( dynamic および static オプションを参照)、 rtl オプションにより、 -l フラグで指定された入力ファイルの末尾を .so および .a にすることができる。 共有オブジェクトである入力ファイルはすべて、出力ファイルのローダー・セクションではプログラムに依存するファイルとしてリストされます。 共有オブジェクトは、コマンド・ラインで指定した順にリストされます。 アーカイブに含まれている共有オブジェクトは、そのアーカイブが共有オブジェクト・メンバーの自動ロードを指定している場合にのみリストされます。 以下の行を使用してインポート・ファイルを作成することにより、アーカイブ・メンバー foo.o の自動ロードを指定できます。
-bautoloads オプションを使用して、より多くのアーカイブ・メンバーを指定することができます。 インポート・ファイルの 1 行目が#! (番号記号、感嘆符) で始まる場合は、このファイルを通常の InputFile としてコマンド・ラインで指定できます。 それ以外の場合は、-bI または -bimport オプションを使用してインポート・ファイルを指定しなければなりません。 |
| rtllib | ランタイム・リンカーへの参照を含む。 ランタイム・リンカーは librtl.aで定義され、暗黙的な -lrtl フラグがコマンド行に自動的に追加されます。 このオプション ( rtl オプションによって暗黙指定される) は、メインプログラムをリンクするとき、またはランタイム・リンクが発生しないときに使用する必要があります。 このオプションで共有オブジェクトをリンクする必要はありません。 svr4 オプションを使用しない場合、デフォルトは nortllib オプションです。 |
| rwexec | プロセスのプライベート・データ領域の実行許可を、システムの sed_config 設定に従って決定するかどうかを指定します。 このオプションはデフォルトです。 |
| rwexec_must | システムの sed_config 設定に関係なく、プロセスのプライベート・データ領域に実行権限があることを指定する。 |
| S: Number | -S フラグと同じように機能します。 |
| scalls:FileID | オブジェクト・ファイルのアドレス・マップを FileID に書き込みます。 シンボルはアルファベット順にリストされます。 マップにリストされるシンボルごとに、そのシンボルから他のシンボルへの参照がリストされます。 デフォルトでは、ファイルは作成されません。 scalls オプションについて詳しくは、 アドレス・マップを参照してください。 |
| shared | dynamic オプションと同じように機能します。 |
| shmpsize: PSIZE | 共有メモリの psize ページサイズをバイト単位で要求する。 指定する値は 2 の累乗でなければなりません。 そうでない場合、値は最も近い 2 の累乗に切り捨てられます。 この値は、10 進数、16 進数、または 8 進数で指定できます。 また、ページ・サイズは、数値の後に 1 文字の接尾部を付けて指定できます。
-b shmpsize:64k または -b shmpsize:0x10000 のいずれかが、共有メモリー用に 64 KB のページ・サイズを要求します。 指定された値が 0 でない場合、XCOFF ヘッダーの f_flags メンバーの F_VARPG ビットが設定されます。 0 を指定すると、F_VARPG はクリアされます。 プログラムは、共用メモリーのデフォルトのページ・サイズを使用します。 32 ビット・モードでは、このフラグは無視され、警告メッセージが出力されます。 |
| shrsymtab | 64 ビット・モードの場合に、XCOFF 補助ヘッダー内で _AOUT_SHR_SYMTAB フラグをセットします。 File が 64 ビット・プログラムの場合、プログラムの実行時に共用シンボル・テーブルが作成されます。 File が 64 ビット・オブジェクトであるが、64 ビット・プログラムではない場合、_AOUT_SHR_SYMTAB フラグを設定することはできますが、実行時には効果はありません。 32 ビット・モードでは、このフラグは無視されます。 デフォルトは noshrsymtabです。 |
| smap:FileID | オブジェクト・ファイルのアドレス・マップを FileID に書き込みます。 シンボルはアルファベット順にリストされます。 デフォルトでは、ファイルは作成されません。 smap オプションについて詳しくは、以下の「 アドレス・マップ 」を参照してください。 |
| so | autoimp オプションと同じように機能します。 |
| stabcmpct: Level | デバッグ・セクションのスタブ文字列の圧縮レベルを指定します。 スタブストリングは8文字より長い文字列である。 シンボル・テーブル内の各サブストリングは、デバッグ・セクションに独自のオフセットがあります。 Level に有効な値は次のとおりです。
|
| stabsplit | デバッグ・セクションを、拡張子が .stab の代替出力ファイルに書き出す。 |
| stackpsize:PSIZE | プロセス・メイン・スレッド・スタックの psize ページ・サイズをバイト単位で要求する。 この値は、10 進数、16 進数、または 8 進数で指定できます。 数値の指定は、C プログラミング言語の場合と同じです。 また、ページ・サイズは、数値の後に 1 文字の接尾部を付けて指定できます。
-b stackpsize:16k または -b stackpsize:0x4000 のいずれかが、プロセス・メイン・スレッド・スタックに対して 0x4000 を要求し、XCOFF ヘッダーに F_VARPG ビットを設定します。 |
| static | リンカが後続の共有オブジェクトをスタティック・モードで処理できるようにする。 静的モードでは、共有オブジェクトは出力ファイルに静的にリンクされます。 |
| svr4 | コマンドライン上の他のいくつかのオプションの意味と、リンカーの標準的な動作を変更する。 このオプションは、リンカーに対して以下の影響を及ぼします。
|
| sxref:FileID | オブジェクト・ファイルのアドレス・マップを FileID に書き込みます。 シンボルはアルファベット順にリストされます。 マップにリストされるシンボルごとに、他のシンボルからそのシンボルへの参照がリストされます。 デフォルトでは、ファイルは作成されません。 sxref オプションについて詳しくは、以下の「 アドレス・マップ 」を参照してください。 |
| symbolic | 明示的な属性なしでエクスポートされる多くのシンボルに、symbolic 属性を割り当てます。 詳しくは、後続の「 エクスポートされたシンボルの属性 」を参照してください。 このオプションは、 svr4 オプションを使用する場合のデフォルトです。 それ以外の場合、デフォルトは symbolic- オプションです。 |
| textro | ro オプションと同じです。 |
| textpsize:PSIZE | テキストの psize ページサイズをバイト単位で要求する。 この値は、10 進数、16 進数、または 8 進数で指定できます。 数値の指定は、C プログラミング言語の場合と同じです。 ページサイズは、数字の後に1文字のサフィックスを付けて指定することができます:
-b textpsize:16k または -b textpsize:0x4000 のいずれかがテキストとして 0x4000 を要求し、XCOFF ヘッダーに F_VARPG ビットを設定します。 |
| tmplrename | バインダーが一般的なインスタンス化を検査する必要があることを指定します。 バインダーは、__tfNNxxx_name 形式のシンボルを検査して、そのシンボルの名前を name に変更します。 デフォルトは -bnotmplrenameです。 注: このオプションは、32 ビット・モードの場合にのみ必要です。 このオプションは、64 ビットのオブジェクトの作成時には無視されます。
|
| typchk | 外部関数呼び出しの間で、関数パラメーター・タイプの検査を行います。 パラメーター・タイプ検査の情報は、コンパイラーおよびアセンブラーによってオブジェクト・ファイルに組み込むことができます。 このオプションはデフォルトです。 タイプ検査について詳しくは、 XCOFF オブジェクト・ファイル・フォーマットを参照してください。 |
| weaklocal | 弱いシンボルが参照先のオブジェクト・ファイル内で最初に検索されることを指定します。 弱いシンボルが検出されない場合は、通常の検索順序で再開されます。 |
| x | エラーが存在しない場合に、出力ファイルを実行可能ファイルにします。 このオプションはデフォルト・オプションです。 |
| X または xref:FileID | オブジェクト・ファイルのアドレス・マップを FileID に書き込みます。 シンボルはセクション別にソートされてから、アドレス別にソートされます。 マップにリストされるシンボルごとに、他のシンボルからそのシンボルへの参照がリストされます。 デフォルトでは、ファイルは作成されません。 xref オプションについて詳しくは、以下の「 アドレス・マップ 」を参照してください。 |
実行時リンク
デフォルトでは、共有オブジェクト内のシンボルへの参照は、リンク時にバインドされます。 つまり出力モジュールは、インポートされたシンボルを特定の共有オブジェクト内の定義に関連付けます。 ロード時には、他の共有オブジェクトが同じシンボルをエクスポートする場合でも、指定された共有オブジェクト内の定義が使用されます。
プログラムがランタイム・リンカーを使用するようにして、一部のシンボルをロード時にリバウンドできるようにすることができます。 ランタイム・リンカーを使用するプログラムを作成するには、 -brtl オプションを指定してプログラムをリンクします。 共有モジュールをリンクする方法は、シンボルの再バインドに影響します。
-G フラグを使用して、ランタイム・リンクが使用可能になっている共有オブジェクトをビルドできます。 既存の共有オブジェクトに対してランタイム・リンクを完全に使用可能にするには、 rtl_enable コマンドを使用してそれらのオブジェクトを再リンクします (ストリップされていない場合)。
シンボル可視性
入力オブジェクト・ファイル内のグローバル・シンボルおよび弱いシンボルには、可視性シンボルのマークを付けることができます。 4 つのシンボル可視性が定義されています。
| シンボル | 可視性 |
|---|---|
| 内部 | 記号はエクスポートされません。 シンボルのアドレスは、他のプログラムや共有オブジェクトに提供されてはなりませんが、リンカーはこのことを検査しません。 |
| 隠し | 記号はエクスポートされません。 |
| 保護 | シンボルはエクスポートされますが、ランタイム・リンクが使用されている場合でも、リバウンド (または優先使用) することはできません。 |
| エクスポート済み | シンボルは、グローバル・エクスポート属性とともにエクスポートされます。 |
シンボルの可視性は、アセンブラー・ソース・ファイルで指定できます。 一部のコンパイラーも可視性をサポートしています。 詳細については、コンパイラーの資料を参照してください。
エクスポート・ファイルもシンボルの可視性を指定するために使用できます。 通常、エクスポート・ファイルで指定された可視性は、オブジェクト・ファイルで指定された可視性より優先されます。 このリンカーは、プログラムまたは共有オブジェクト用のエクスポート・リストを作成するときにシンボルの可視性を考慮に入れます。
インポートおよびエクスポート・ファイルの形式 (-bI: および -bE: フラグ)
インポート・ファイルまたはエクスポート・ファイルの各行には、シンボルの名前が含まれ、オプションでその後にアドレスまたはキーワードが続きます。 主なキーワードは svc, svc32, svc3264, svc64, syscall, syscall32, syscall3264, syscall64, symbolic, nosymbolic, nosymbolic-, list, cm, bss, internal, hidden, protected, および export である。 別のキーワードと一緒に使える追加キーワードは、 weak と required。
インポート・ファイルでは、アドレスを指定すると、シンボルを、共有メモリー・セグメント内のアドレスのように固定したアドレスにマップすることができます。 キーワード cm、bss、または weak の いずれかを使用して、インポートされるシンボルのストレージ・クラスを指定することもできます。 autoexp オプションを使用すると、インポートされるシンボルのストレージ・クラスが、どのシンボルを自動的にエクスポートするかに影響します。 インポート・ファイルで別のキーワードを指定すると、このキーワードは無視されます。
エクスポート・ファイルでは、機能名の後に svc、svc32、svc3264、svc64, syscall, syscall32、syscall3264、または syscall64 キーワードを使用して、機能がシステム呼び出しであることを示すことができます。 このオプションは、カーネル・エクステンションをリンクする場合に必要です。 出力ファイルがカーネル・エクステンションでない場合、これらのキーワードは symbolic キーワードと等価です。
list キーワードを使用すると、エクスポートされたシンボルとしてマークされていなくても、出力ファイルのローダー・セクションにシンボルがリストされるようにすることができます。 list キーワードは、実行時にいくつかのシンボルを処理するアプリケーションに使用できます。 システム・ローダーや実行時リンカーは、リストされたシンボルは処理しません。
symbolic、nosymbolic、または nosymbolic- キーワードを使用して、エクスポートされるシンボルに属性を関連付けることができます。 エクスポート・ファイル内のシンボル・アドレスは無視されます。 エクスポート・ファイルでは、キーワード cm および bss は nosymbolic キーワードと同等です。 シンボルの可視性は、 internal、 hidden、 protected、または export キーワードで指定できます。 詳しくは、エクスポートされたシンボルの属性 を参照してください。
weak キーワードは、弱いシンボル・バインディングを指定するために使用できます。また、別の属性と一緒に使用することもできます。
required キーワードを使用して、シンボルが定義済みでインポートされていないことを確認してください。 これらの基準を満たさないシンボルについてエラーが表示されます。
ld コマンドはインポート・ファイルおよびエクスポート・ファイルを次のように処理します。
- ブランク行は無視されます。
- * (アスタリスク) で始まる行はコメントであるため、無視されます。
# (番号記号、ブランク・スペース) で始まる行は、オペランドを setopt バインダー・サブコマンド (-bdbg:Option) に提供します。 例えば、
# verboseを含む行があると、バインダーは、ファイルから読み取られた各シンボルをリストします。 このオプションの設定はファイルを処理している間だけ有効です。 # 32、# 64、# no32、および # no64 オプションを使用して、リストされたシンボルを 32 ビット・リンク、64 ビット・リンク、またはその両方に使用する必要があるかどうかを指定できます。- 32ビットと64ビットのインポートファイルオプション
表 6.32ビットと64ビットのインポートファイルオプション 項目 説明 32 このオプションは、インポート・ファイルまたはエクスポート・ファイルで使用され、32 ビット・モードでリンクする場合は後続のシンボルを処理する必要があるが、64 ビット・モードでリンクする場合は無視することを指定します。 32 または 64 オプションが指定されていない場合、すべてのシンボルは 32 ビットと 64 ビットの両方のモードで処理される。 64 このオプションは、インポート・ファイルまたはエクスポート・ファイルで使用され、64 ビット・モードでリンクする場合は後続のシンボルを処理する必要があるが、32 ビット・モードでリンクする場合は無視することを指定します。 32 オプションまたは 64 オプションを指定しない場合、すべてのシンボルが 32 ビットと 64 ビットの両方のモードで処理されます。 no32 または no64 このオプションは、以前の 32 または 64 を上書きする。 後続のシンボルは、32ビットと64ビットの両方のモードで処理される。
- インポート・ファイルを処理する際、#! (#, 感嘆符)で始まる行は、後続のインポート・シンボルに関連付けられ る共有ライブラリ名を提供する。 この行は複数回現れ、
#!で始まる次の行が読み取られるまで後続のシンボルに適用されます。 このファイル名情報は、XCOFF オブジェクト・ファイルのローダー・セクションに置かれます。 これは、実行時に適切なオブジェクト・ファイルを見つけるためにシステム・ローダーによって使用されます。 インポートファイル名がメンバー(ipath/ifile )である場合、ローダーセクションに配置されるファイル名は、インポートファイル名とインポートファイルの#!行の内容に基づいて、以下のように決定される:表7. インポートファイルの「 #!行の内容項目 説明 #! NULLパス、NULLファイル、NULL番号を使用する。 このオプションは、システム・ローダーによって据え置きインポートとして扱われます。 #! () ipath、ifile、imemberを使います。 この行は、インポート・ファイルをコマンド・ラインで InputFile パラメーターとして指定している場合に使用できます。 この場合、ファイルは#!で始まらなければなりません。 この行は、他の行(#!)によってデフォルト名が変更された場合に、それを復元するためにも使用できる。#! path/ファイル (メンバー) 指定されたパス、指定されたファイル、指定されたメンバーを使います。 #! パス/ファイル 指定されたパス、指定されたファイル、およびヌル・メンバーを使います。 #! ファイル ヌル・パス、指定されたファイル、およびヌル・メンバーを使います。 実行時にはディレクトリーのリストを検索して共有オブジェクトを見つけます。 #! (メンバー) ipath、ifile、および指定されたメンバーを使います。 実行時にはディレクトリーのリストを検索して共有オブジェクトを見つけます。#! file (メンバー) ヌル・パス、指定されたファイル、指定されたメンバーを使います。 実行時にはディレクトリーのリストを検索して共有オブジェクトを見つけます。 #! . (1 つのドット) この名前は、メインの実行可能ファイルを参照します。 別の名前を持つ複数のメインプログラムからシンボルをインポートする共有オブジェクトを作成する場合、このファイル名を使用します。 メインプログラムは、他のモジュールによってインポートされたシンボルをエクスポートする必要があります。そうしないと、ロードは失敗します。 このインポート・ファイル名は、ランタイム・リンカーの有無にかかわらず使用できます。 #! .. (ドット2つ)このファイル名は、ランタイム・リンカーが解決するシンボルを列挙するために使用する。 プログラムで使用される共有オブジェクトを作成するには、このファイル名を使用する。 プログラムはランタイム・リンカーを使用する。 rtllib オプションでリンクされていないプログラムで、 .. からシンボルをインポートしたモジュールを使用すると、そのシンボルは未解決になり、そのようなシンボルへの参照は未定義の動作になります。
-brtl オプションを使用する場合にアーカイブ・メンバーを自動的にロードするため、次のようにしてインポート・ファイルを作成できます。 shr.so がアーカイブ内の共有オブジェクトである場合、次のようにしてインポート・ファイルを作成します。
# autoload
#! (shr.so)必要に応じて、追加のメンバー名をさらに多くの行にリストすることができます。 shr.so からインポートされたシンボルは shr.so 自体から読み取られるため、インポート・ファイル内のシンボル名をリストする必要はありません。
共有ライブラリーの作成について詳しくは、 create_shared_lib サブルーチンを参照してください。 ロードおよびバインドの詳細については、 load サブルーチンを参照してください。
order_file format
order_fileフォーマットファイルで指定されたシンボルは、「-border_fileフラグが使 用されている場合、同じストレージマッピング・クラスの他のシンボルよりも 前にマッピングされる。
<symbol-name> <white-space> <optional-smc-or-index> <white-space> <optional-object-module>以下は、 order_file 形式のファイルを作成するためのガイドラインです:
- オプションの'
<optional-smc-or-index>と'<optional-object-module>フィールドが'order_fileフォーマットファイルに記述されていない場合、'<symbol-name>フィールドに指定された値がグローバル名として使用される。 - 行頭のハッシュタグ(
#)またはアスタリスク(*)、あるいは行の任意の位置で空白を含む'#または'*文字は、コメントを示す。 その行がコメントとして認識されている場合、残りの行は無視される。 <symbol-name>フィールドの値には、タブ、空白、改行以外のあらゆる文字を含めることができる。 ただし、「<symbol-name>フィールドの値は、「#または「*文字で始まってはならない。<optional-smc-or-index>フィールドは以下のいずれかの値を取ることができる:[<smc>]: '[<smc>]オプションは、ストレージ・マッピング・クラスを指定する。 ストレージ・マッピング・クラスは'/usr/include/syms.hファイルで定義されている。 TC0という名前の目次(TOC)アンカーは、ストレージ・マッピング・クラスとしては使えない。%<number>: '%<number>オプションはシンボルテーブルのインデックスを指定する。
<optional-object-module>フィールドは以下のいずれかの値を取ることができる:<<pathname>>:<pathname>オプションは、 object_file ファイルのパスを指定する。 パス名は'<>ブラケットで囲まなければならない。<<pathname>(<member>)>>: '(<member>)オプションはアーカイブメンバーを指定する。 アーカイブ・メンバー名は'()括弧で囲む必要がある。 <pathname> ( <member> ) の値全体を角括弧 (<>) で囲む必要があります。
オブジェクト・モジュール名には、開き角括弧、閉じ角括弧、開き括弧、閉じ括弧を含んではならない。 <パス名>の値が'
/で始まる場合、パス名は絶対一致でなければならない。 <パス名>の値は、一意に一致するものが見つかれば、先頭のディレクトリ名をいくつでも削除して短くすることができる。- ハイフン(
-)を1つ指定すると、名前のない記号を指定できる。 <symbol- name >フィールドに名前のないシンボルを指定する場合は、<optional-smc-or-index>フィールドを使用してシンボルテーブルのインデックスを指定し、<optional-object-module>フィールドを使用して object_file ファイルパス名を指定してください。 <optional-smc-or-index>フィールドが指定されず、'<optional-object-module>フィールドが指定された場合、TOC記号(TCまたはTE)は無視される。<optional-smc-or-index>フィールドが指定され、'<optional-object-module>フィールドが指定されない場合、'<optional-smc-or-index>フィールドに指定できるのは'[<smc>]オプションのみである。 この場合、'<symbol-name>フィールドで指定され、指定されたストレージマッピング・クラスを持つシンボルが選択される。- シンボル名、シンボルテーブルのインデックス、および「
<optional-object-module>フィールドを指定し、シンボルテーブルのインデックスが指定したシンボル名のシンボルを指している場合、このシンボル値が選択される。 - ストレージマッピング・クラスと'
<optional-object-module>フィールドに値を指定すると、指定されたストレージマッピング・クラスを持つシンボルが選択される。注:TOCアンカーは決して選択できない。 - 選択されたシンボルが出力ファイルに保存されない場合、そのシンボルはガベージコレクションとみなされる。 システムは、'order_fileフォーマットファイル中の、出力ファイルに保存されていないシンボルの行を無視する。
.foo # Denotes a global symbol, probably a function.
.foo1 <obj1.o> # Denotes a symbol in obj1.o, but not a TOC symbol.
.foo2 <libxxx.a(maxi64.o)> # Denotes a symbol in an archive member, but not a TOC symbol.
var [TC] # Denotes the unique TOC symbol referring to a global variable.
foo1 [TC] <obj1.o> # Denotes the TOC symbol in obj1.o.
var2 %99 <obj2.o> # Denotes the symbol ‘var2’ with symbol table index 99 in obj2.o.
- %17 <obj3.o> # Denotes the unnamed symbol with symbol table index 17 in obj3.o.エクスポートされるシンボルの属性
ランタイム・リンクを使用する場合、同じモジュール内のシンボルへの参照は、シンボルが適切な属性でエクスポートされた場合にのみリバウンドできます。 symbolic 属性を持つシンボルへの参照をリバウンドすることはできません。 nosymbolic 属性を持つシンボルへの参照は、リバウンドできます。 nosymbolic- 属性を持つシンボルへの参照は、シンボルが変数の場合はリバウンドできます。 関数シンボルの場合、関数ポインターを使用した呼び出しはリバウンドできますが、直接関数呼び出しはリバウンドできません。 nosymbolic- 属性がデフォルトです。この属性は、オペレーティング・システムのこれまでのバージョンとの互換性のために提供されますが、お勧めできません。
ランタイム・リンカーを使用しない場合は、 nosymbolic 属性を使用しないでください。モジュール内関数呼び出しは、グローバル・リンケージ・コードを使用して関数記述子を介して間接的に行われるためです。 それ以外の場合、エクスポートされたシンボルの属性は、ランタイム・リンカーを使用しないプログラムで使用されるモジュールには影響しません。
エクスポート・ファイルにリストされているシンボルに対して、明示的なエクスポート属性を指定できます。 明示的な属性のない多くのシンボルは、symbolic オプション、nosymbolic オプション、または nosymbolic- オプションで指定したデフォルトのエクスポート属性でエクスポートされます。
シンボルがエクスポート・ファイルでキーワードなしでリストされ、シンボルの可視性が入力ファイルで指定されている場合、シンボルの可視性が保持されます。 入力シンボルの可視性は、 internal, hidden、 protected、または export キーワードを使用してオーバーライドできます。
weak エクスポート属性は、関連するシンボルのマッピング・タイプを、ローダー・セクションの L_WEAK にマークする。
インポートされたシンボルは、 weak エクスポート属性のみを持つことができます。 シンボルが別のモジュールからインポートされると、そのシンボルへのすべての参照をリバウンドできます。 ただし、シンボルが固定アドレスでインポートされる場合、すべての参照はこの固定アドレスにバインドされ、ランタイム・リンカーによってリバウンドされることはありません。 システム・ローダーは、延期されたインポートを解決しなければなりません。 ランタイム・リンカーは、据え置きインポートへの参照を解決したり再バインドしたりすることはありません。
インポートされていないシンボルのエクスポートには、以下のルールが使用される。
- シンボルに list 属性がある場合、ローダー・セクションのシンボル・テーブルにリストされます。しかし、シンボル・テーブル・エントリーに L_EXPORT フラグは設定されません。 ランタイム・リンカーは、このようなシンボルを無視します。
- シンボルが明示的な属性、または明示的な可視性を伴ってエクスポートされた場合、明示的な属性、または可視性が使用される。
- シンボルが BSS シンボルである場合、nosymbolic 属性でエクスポートされます。
- それ以外のシンボルの場合、symbolic オプション、nosymbolic オプション、または nosymbolic- オプションで指定したグローバル属性でシンボルがエクスポートされます。 デフォルトのグローバル属性は nosymbolic- です。
アドレス・マップ
ld コマンドはアドレス・マップを生成して、出力オブジェクト・ファイル内のシンボルのレイアウトをリストします。 map (または R) オプションを使用すると、未解決のシンボルとインポートされたシンボルが最初にリストされ、次に各セクションのシンボルがアドレス順にリストされます。 calls (または C) オプションを使用すると、各シンボルの後に、そのシンボルから他のシンボルへの参照がリストされます。 xref (または X) オプションを使用すると、各シンボルの後に、他のシンボルからそのシンボルへの参照がリストされます。 smap、 scalls、または sxref オプションを使用する場合、アドレス・マップには、 map、 calls、または xref オプションによってリストされるものと同じ情報が含まれますが、シンボルはアルファベット順にリストされます。
内部シンボルは、ストレージ・クラス HIDEXT と共に、シンボル名の前後に文字 < および > (不等号括弧) が付いた形式で出力されます。 ストレージ・クラス C_EXT を持つ外部シンボルの名前は、不等号括弧なしで印刷され、C_WEAKEXT のストレージ・クラスを持つシンボルは、シンボル名の前後に文字 { および } を付けて印刷されます。
各シンボルについて、以下の情報がリストされます。
- シンボルがインポートされたか、エクスポートされたか、またはエントリー・ポイントかを示す情報。 * (アスタリスク) はエントリー・ポイントを、I はインポートされたシンボルを、E はエクスポートされたシンボルを示します。
- そのアドレス (インポートされたシンボルを除く)
- 長さおよびアライメント(
CSECTsおよび BSS シンボルの場合) - ストレージ・マッピング・クラス
- シンボル・タイプ
- シンボル番号 (同じ名前のシンボルを区別するために使用)
- シンボル名
- 入力ファイル情報
ストレージ・マッピング・クラスとシンボル・タイプは、/usr/include/syms.h ファイル内で定義されます。 アドレス・マップでは、最後の 2 文字のみが表示されます。ただし、ストレージ・マッピング・クラス XMC_TC0 は T0と表示されます。
入力ファイル情報は、入力ファイルのタイプに応じて異なります。 オブジェクト・ファイルの場合、C_FILE シンボル・テーブル・エントリーから取得されるソース・ファイル名がリストされます。 オブジェクトがアーカイブ・ファイルから取り出されると、そのオブジェクト・ファイル名は次のフォーマットでリストされます。
ArchiveFileName[ObjectName]
共有オブジェクト名は中括弧({ })の間に記載されます。共有オブジェクトがインポート・ファイルで定義されている場合、インポート・ファイル名は共有オブジェクト名の前に記載されます。
インポート記号は記号タイプが ER であるが、関連するファイル入力情報を持つ。 未定義のシンボルも、シンボル・タイプ ER と共にリストされますが、シンボル番号を除く他のすべての欄は空白になっています。
-T および -D フラグ (または pT または pD オプション) は、これらのアドレス・マップに出力されるアドレスに影響します。 マシン・レベルでデバッグする場合は、シンボルが実行時と同じアドレスでリストされるようにアドレスを選択すると便利です。 プライベート・モードでロードされた共有オブジェクトを使用しない 32 ビット・プログラムの場合、-bpT:0x10000000 オプションおよび -bpD:0x20000000 オプションで指定して正しいアドレスを選択できます。 この 2 つのオプションは、デフォルトでは /etc/xlC.cfg ファイルまたは /etc/vac.cfg ファイル内に定義されます。
環境変数
以下の環境変数が、ld コマンドの実行に影響を与えます。
| 項目 | 説明 |
|---|---|
| LIBPATH | LIBPATH を定義すると、その値はデフォルトのライブラリー・パス情報として使用されます。 デフォルトのライブラリー・パスは /usr/lib:/libです。 -L フラグも -blibpath オプションも指定しなければ、デフォルトのライブラリー・パス情報は出力ファイルのローダー・セクションに書き込まれます。 指定するオプションに関係なく、コマンド・ラインから指定したライブラリーの検索時には LIBPATH は使用されません。 |
| TMPDIR | 出力ファイルが存在するか、リモート・ファイル・システム上にある場合、 ld コマンドは一時出力ファイルを生成します。 一時出力ファイルは、 TMPDIRで指定されたディレクトリーに作成されます。 TMPDIR を定義しない場合、出力ファイルがリモート・ファイルシステム上にあるか、または既存の出力ファイルと同じディレクトリー内にあると、一時出力ファイルは /tmp ディレクトリー内で作成されます。 |
| OBJECT_MODE | -b32 または -b64 オプションを使わない場合、 OBJECT_MODE 環境変数を調べてリンク・モードを決定する。 OBJECT_MODE の値が 32 または 64の場合は、32 ビット・モードまたは 64 ビット・モードが使用されます。 値が 32_64 またはその他の値の場合、リンカーはエラー・メッセージを出力し、ゼロ以外の戻りコードで終了します。 それ以外の場合は、32 ビット・モードが使用されます。 |
例
- 複数のオブジェクト・ファイルをリンクして、オペレーティング・システムの下で実行する a.out ファイルを作成するには、次のコマンドを入力します。
-lc コマンドは libc.a ライブラリをリンクする。 libc.a ライブラリーをリンクするより簡単な方法は、次のように cc コマンド (コンパイラー) を使用してファイルをリンクすることです。ld /usr/lib/crt0.o pgm.o subs1.o subs2.o -lccc pgm.o subs1.o subs2.o - 出力ファイルの名前を指定するには、次のコマンドを入力します。
これによりファイル pgm 内に出力が作成されます。cc -o pgm pgm.o subs1.o subs2.o - オブジェクト・ファイル subs1.o のみが変更された場合に pgm を再リンクするには、次のコマンドを入力します。
もともとオブジェクト・ファイル pgm.o と subs2.o にあったcc -o pgm subs1.o pgmCSECTsは、ファイル pgm から読み込まれる。 この手法は、プログラムが多くの入力ファイルから構成されており、一度に変更するファイルが少ない場合に、リンク処理を迅速に行うことができます。 - ライブラリー・サブルーチンとリンクするには、次のコマンドを入力します。
これは、オブジェクト・モジュール pgm.o、 subs1.o、 subs2.o、 mylib.a アーカイブのサブルーチン、 -l フラグで指定されたライブラリーのサブルーチンをリンクする。 つまり、 /usr/lib/libtools.a 。cc pgm.o subs1.o subs2.o mylib.a -ltools - 共有オブジェクトを生成するには、次のコマンドを入力します。
これにより、 -lc フラグで指定されたライブラリー libc.a から、オブジェクト・ファイル subs1.o、 subs2.o、およびサブルーチンがリンクされます。 これは、ファイル shrsub.exp で指定されたシンボルをエクスポートし、リンクされた共有オブジェクトをファイル shrsub.oに保管します。 -bM:SRE は、リンクされたオブジェクト・ファイルに共有オブジェクト・フラグを設定します。ld -o shrsub.o subs1.o subs2.o -bE:shrsub.exp -bM:SRE -lc - 以前に生成された共有オブジェクト shrsub.o にリンクするには、次のコマンドを入力します。
これにより、オブジェクト・ファイル pgm.o が、エクスポートされた shrsub.oのシンボルとリンクされます。 リンクされた出力は、オブジェクト・ファイル pgmに保管されます。 -L '.' は、 shrsub.o 共有オブジェクトを見つけるためにシステム・ローダーが使用するライブラリー検索パスに、現行ディレクトリーを追加します。 実行時に、このプログラムが shrsub.o ファイルのインスタンスを含むディレクトリーから実行される場合、または shrsub.o ファイルが /usr/lib 標準ライブラリー・ディレクトリーで検出される場合にのみ、このプログラムがロードされます。 プログラムをどこからでも実行できるようにするには、オプション -L `pwd`を使用します。cc -o pgm pgm.o shrsub.o -L '.'システム・ローダーによって検索されるディレクトリーのリストは、 dump コマンドを使用して見ることができます。
- libc.a ライブラリーを非共用ライブラリーとして使用してプログラムをリンクするには、次のコマンドを入力します。
これは、pgm.o を必要なサポート・ライブラリーにリンクして、その結果生成される出力ファイルを pgm と命名します。 cc コマンドの場合、 libc.a ライブラリは必要なサポートライブラリであり、共有ライブラリとしてユーザーのプログラムにリンク編集される。 この例では、 -bnso オプションは、 libc.a ライブラリを非共有ライブラリとしてリンクするよう、 ld コマンドに指示する。 -bI:/lib/syscalls.exp は、 ld コマンドに、カーネルまたは /usr/lib/boot/unix ファイルに含まれるシステムコール関数をインポートするよう指示する。 -bnso オプションでリンクされる場合、共有オブジェクトの中でインポートおよびエクスポートされるシンボル、または渡されるシンボルは、明示的にインポートされなければならない。 この例では -bI:/lib/syscalls.exp 。cc -o pgm pgm.o -bnso -bI:/lib/syscalls.exp注: /usr/lib/libc.a が非共有でリンクされている場合はいつでも、フラグ -bI:/lib/syscalls.exp を使用する必要があります。 このアプリケーションは、オペレーティング・システムの更新リリースがインストールされるたびに、再度リンクする必要があります。 静的にリンクされたアプリケーションは、どのフィックスまたはリリース・レベルからも他のフィックスまたはリリース・レベルにもバイナリー・ポータブルではありません。
ファイル
| 項目 | 説明 |
|---|---|
| /usr/bin/ld | ld コマンドが入っています。 |
| /usr/lib/lib*.a | プログラムのリンクに使用されるライブラリーを指定します。 |
| a.out | デフォルトの出力ファイル名を指定します。 |