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 つの出力オブジェクト・ファイルに結合して、外部参照を解決します。 さらに、このコマンドは実行可能オブジェクト・ファイルを作成します。 さらに、 -s フラグを指定せずに ld コマンドを指定した場合は、 ld コマンドへの別の呼び出しで、出力ファイルを InputFile パラメーターとして使用することができます。 デフォルトでは、ld コマンドは出力を作成し、a.out というファイル内に置きます。
ld コマンドを使用すると、すべての入力オブジェクト・ファイルをリストしなくても、プログラムを再リンクできます。 例えば、大規模なプログラムのオブジェクト・ファイルが1つ変更された場合、新しいオブジェクト・ファイルと古いプログラムをコマンド・ラインにリストアップし、プログラムが必要とする共有ライブラリも一緒にリストアップすることで、プログラムを再リンクすることができる。 例を参照してください。
ld コマンドは、コマンド行で指定された順序で入力ファイルをリンクします。 同じファイルを複数回指定すると、そのファイルの最初のオカレンスのみが処理されます。 -bI (大文字の i)、 -bimport、 -bkeepfile、 -f、または -l (小文字の L) フラグを使用するか、 InputFile パラメーターとして、少なくとも 1 つの入力ファイルを指定してください。 (「-bI、「-bimport、「-bkeepfileフラグは、「I、「import、「keepfileオプションとともに使われる「-bフラグである)
オペレーティング・システム上で実行するプログラムを作成する場合は、cc コマンドを使用してファイルをリンクしてください。 cc コマンドは共通オプションと必要なサポート・ライブラリーを指定して ld コマンドを呼び出すので、コマンド・ラインにそれらのオプションとライブラリーを指定する必要はありません (この情報は、/etc/xlC.cfg または /etc/vac.cfg の構成ファイルから読み取られます)。
- リンク・モード
ldコマンドは、64ビット・オブジェクトやプログラムと同様に32ビット・オブジェクトやプログラムもリンクできるが、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 ファイルです。 エクスポート・ファイルのフォーマットは、インポート・ファイルと同じです。
- ライブラリー
ライブラリーは、.a で終わる名前のファイルです。ライブラリーによっては .so で終わる場合もあります。 ライブラリーを指定するには、絶対パス名または相対パス名を指定するか、 -l Nameの形式で -l (小文字の L) フラグを使用します。 最後の形式は、 libName.a ファイルを指定します。または、 rtl オプションが使用されている場合は、複数のディレクトリーで検索される libName.so ファイルを指定します。 これらの検索ディレクトリーには、-L フラグで指定したディレクトリーと、標準ライブラリー・ディレクトリーである /usr/lib と /lib が含まれます。
注: -l Name フラグではなく、絶対パス名または相対パス名を使用して、共有オブジェクト、または共有オブジェクトを含むアーカイブ・ファイルを指定すると、出力ファイルのローダー・セクションのインポート・ファイル ID ストリングにパス名が組み込まれます。 -bnoipath オプションによってこの動作をオーバーライドできます。- 処理中
ld コマンドは、すべての入力ファイルを、アーカイブ・ファイルであるかどうかに関係なく同様に処理します。 このコマンドは、すべてのオブジェクトのシンボル・テーブルを組み込み、既存のシンボルと重複するシンボル定義のみを廃棄します。 他のバージョンの ld コマンドとは異なり、参照が定義よりも先になるようにアーカイブ・ファイルを並べ替える必要はありません。 また、同じアーカイブ・ファイルをコマンド・ラインで何度もリストする必要もありません。
ld コマンド・フラグの順序は、入力オブジェクト・ファイル、ライブラリー、およびインポート・ファイルを除けば、コマンドの処理方法には影響を与えません。 これらのフラグは、 -L、 -f、 -l (小文字の L)、 -bkeepfile、および -bI (大文字の i) です。 これらのフラグは、次の順序で処理されます。
- -L フラグは、-l (L の小文字) フラグで指定したライブラリーを見つけるために、検索ディレクトリーのリストにディレクトリーを追加します。 各ディレクトリーは指定した順序で検索されます。 すべての -L フラグは、-l フラグよりも先に処理されます。
- ld コマンドは、InputFile パラメーターと、-f フラグで指定したファイルと、-l (L の小文字) フラグで指定したライブラリーを、指定した順序で処理します。
- ld コマンドは、他のすべてのオブジェクト・ファイルとライブラリーを処理した後で、-bI (i の大文字) フラグで指定したインポート・ファイルを、指定した順序で処理します。 インポート・ファイルを他のオブジェクト・ファイルよりも先に処理する必要があれば、 -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 | 特殊処理オプションを指定します。 このフラグは繰り返すことができます。 これらのオプションの詳細については、オプション-bOptions)を参照のこと。 |
-d [y | n] |
-dy を指定すると、 ld はダイナミック・リンクを使用します。このオプションは -b so オプションと同等です。 -dn を指定すると、 ld は静的リンクを使用します。このオプションは -b nso オプションと同等です。 デフォルトは -dyです。 このオプションは -bsvr4 オプションが指定されているときにのみ有効です。 |
| -D 番号 | 出力ファイルの初期化データ (データ・セクション) の開始アドレスを Numberに設定します。 指定した数値が 1 であれば、データ・セクションはテキスト・セクションのすぐ後から始まります。 デフォルトでは、データ・セクションは位置 0 から始まります。 -D フラグと -bpD フラグの両方が指定される場合、後者のフラグが優先されます。 注: システム・ローダーは実行時にデータ・セクションを再配置するため、指定された数は、アドレス・マップにリストされているアドレス、または dump コマンドや nm コマンドなどのユーティリティーによって印刷されるアドレスに影響します。
|
| -eLabel | 実行可能出力ファイルのエントリー・ポイントを Label に設定します。 デフォルトのエントリー・ポイントは __start (2 つのアンダースコアーと start) です。 |
| -f FileID | 処理する入力ファイルのリストが入っているファイルを指定します。 FileID には、入力ファイル名のリストが入っていなければなりません。 FileID 内の各行は、 ld コマンド行に個別にリストされているかのように扱われます。 ファイル内の行には、シェル・パターン文字 * (アスタリスク)、 [ (左大括弧)、 ] (右大括弧)、および ? (疑問符) を含めることができます。これらは、 glob サブルーチンを使用して展開され、複数のオブジェクト・ファイルを指定できます。 |
| -G | -G は、ランタイム・リンカーで使用できる共有オブジェクトを生成します。 -G フラグを指定するのは、-b フラグと共に erok、rtl、nortllib、nosymbolic、noautoexp、および M:SRE オプションを指定するのと同じです。 以降のオプションにより、これらのオプションをオーバーライドできます。 |
| -H 番号 | 出力ファイルのテキスト、データ、ローダー・セクションは、各セクションが Number の倍数であるファイル・オフセット上で始まるように位置合わせされます。 値 1 を指定すると、位置合わせは行われません。 指定された数が 0 の場合、ローダー・セクションはワード境界に位置合わせされ、テキスト・セクションとデータ・セクションは、セクション内のすべての CSECT の位置合わせを満たすために境界に位置合わせされます。 デフォルト値は 0 です。 指定された Number によって CSECTS が出力ファイル内で位置合わせされない場合、 ld コマンドは警告を出し、出力実行可能ファイルがロードまたは実行されない可能性があります。 |
| -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 (小文字の 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 は出力ファイルのローダー・セクションに記録されます。 その後、実行時に実行可能ファイルを共有ライブラリーにリンクするときに使用されます。 このオプションの複数インスタンスは、コロンで分離された各 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 | -b svr4 オプションが指定されていない場合、 -z フラグは -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 (小文字の 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 のデフォルト値はヌルの文字列なので、デフォルトのコマンド・ラインは次のようになります。
/usr/ccs/bin/bind quiet
オプション (-bOptions)
- 以下のバインダー・オプションのリストでは、 または という語で区切られた 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 オプションは、このオプションのみが使用されている場合にすべてのランダム化属性を使用可能にし、 aslr オプションの後にコロンを付けると、個別の属性を有効にできます。 属性 t、 d、 s、 m、および pは、テキスト、データ、スタック、mmap、および専用ライブラリーを表します。 リストされていない属性については、ランダム化設定は無効のままです。
注: m および p 属性は、32 ビット・プログラムには指定できません。
再配置可能アドレスがテキスト・セクションにマッピングされるよう、一部のプログラムはコンパイルおよびリンクされています。 このオプションでは、プログラムの実行時にアドレスを再配置する必要があります。 ランダム化がテキストまたはデータに対して有効になっていると、これらのプログラムは失敗します。 その結果、テキスト・セクションの再配置が存在する場合、 aslr オプションを使用して t 属性と d 属性を明示的に指定しない限り、テキストとデータのランダム化は有効になりません。 |
| autoexp | 出力モジュールからいくつかのシンボルを自動的にエクスポートします。エクスポート・ファイルにリストする必要はありません。 (このオプションは、出力モジュールからのすべてのシンボルはエクスポートしません。 すべてのシンボルをエクスポートするには、 bexpall オプションを使用します。) このオプションがデフォルトです。 メインプログラムをリンクするときにこのオプションを使用します。 S で始まるモジュール・タイプ ( M または modtype オプション) を指定せず、 noentry オプションを使用しない場合、リンカーはメインプログラムをリンクすることを想定します。autoexp オプションを使用すると、コマンド行にリストされている共有オブジェクトが特殊ファイル . (ドット) からシンボルをインポートし、リンクされているモジュールにそのシンボルのローカル定義が含まれている場合、そのシンボルは自動的にエクスポートされます。 rtl オプションでリンクすると、その他のシンボルも自動的にエクスポートされます。 リンクされているモジュール内で定義されているシンボルに、コマンド行にリストされている共有オブジェクトからエクスポートされた 1 つ以上の定義があり、それらの定義のいずれかが BSS シンボルである場合、そのシンボルは自動的にエクスポートされます。 リンクされているモジュール内の定義が BSS シンボルである場合、そのシンボルは nosymbolic 属性を使用してエクスポートされます。 その他の場合、シンボルは symbolic 属性でエクスポートされます。 シンボルが別のエクスポート属性でエクスポート・ファイル内にリストされる場合、明示的な属性が使用されます。 autoexp オプションで自動的にシンボルをエクスポートしても、シンボルが list 属性でエクスポート・ファイル内にリストされる場合、シンボルはエクスポートされません。 |
| autoimp または so | 入力ファイルとして指定された共有オブジェクトからシンボルをインポートします。 共有オブジェクトは参照されますが、出力オブジェクト・ファイルの一部としては含まれません。 このオプションはデフォルトです。 |
| autoload: パス/ファイル (メンバー) | アーカイブ・メンバーを自動的にロードします。 |
| bigtls | 出力オブジェクトまたはプログラム内のスレッド・ローカル・ストレージのサイズが 64 KB より大きく、local-exec または local-dynamic のスレッド・ローカル変数への直接参照を生成するコンパイラーが使用された場合に、余分なコードを生成します。 16 ビット・オフセットでアドレッシングできないスレッド・ローカル変数への直接参照ごとに、余分なコードが必要です。 追加のコードを含むプログラムはパフォーマンスが低下する可能性があるため、このオプションを使用するよりも、直接参照を使用するスレッド・ローカル変数の数を減らすことをお勧めします。 デフォルト・オプションは、nobigtls オプションです。 |
| bigtoc | 目次 (TOC) のサイズが 64 KB より大きい場合は、追加のコードを生成します。 余分のコードは、16 ビット・オフセットでアドレッシングできない TOC シンボルへのすべての参照に必要です。 生成されたコードを含むプログラムのパフォーマンスが低下する可能性があるため、このオプションを使用する前に、プログラムが必要とする TOC エントリーの数を減らしてください。 デフォルトは nobigtoc オプションです。 |
| 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 ビット・プログラムの場合、システムで許可される最大値は、大規模プログラム・サポートの下で実行されるプログラムの場合は 64 ビット・プログラムの場合、 maxdata オプションは、プログラム・データ・ヒープの保証された最大サイズを提供します。 任意の値を指定できますが、指定された maxdata 値に関係なく、データ域を |
| 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 (小文字の 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 | インポートされたシンボルへの参照を含む読み取り専用 CSECT を強制的に読み取りまたは書き込みにします。 デフォルトは noforceimprwです。 |
| forkpolicy:ポリシー | 64 ビット・プログラムをリンクするときに、XCOFF 補助ヘッダーで _AOUT_FORK_POLICY フラグおよび _AOUT_FORK_COR フラグを設定します。 policy が corの場合、_AOUT_FORK_COR フラグも設定され、プログラムの実行時に copy-on-reference forktree ポリシーの使用を要求します。 policy が costの場合、_AOUT_FORK_COR フラグがリセットされ、プログラムの実行時にコピー・オン・ライト・フォーク・ツリー・ポリシーの使用が要求されます。 32 ビット・プログラムをリンクする場合、このフラグは無視されます。 デフォルト値は noforkpolicyです。 |
| gc | ガーベッジ・コレクションを実行します。 一部またはすべてのオブジェクト・ファイルに関してガーベッジ・コレクションを禁止するには、nogc、gcbypass、keepfile オプションを使用します。 このオプションはデフォルトです。 |
| gcbypass: Number | gc オプションが指定されている場合に、ガーベッジ・コレクション時にバイパスするファイルの数を指定します。 nogc オプションを使用すると、このオプションは無視されます。 Number が 0 であれば、このオプションは gc オプションと同じであり、すべてのファイルのガーベッジ・コレクションが実行されます。 デフォルト値は 0です。 |
| glink:FileID | FileID で指定されたグローバル・リンケージ・プロトタイプ・コードを使用する。 グローバル・リンケージ・インターフェース・コードは、インポートされた関数または未定義の関数に対して生成されます。 32 ビット・モードでは、デフォルトは /usr/lib/glink.o ファイルです。 64 ビット・モードでは、デフォルトは /usr/lib/glink64.o ファイルです。 |
| h:Number または halt:Number | バインダー・コマンド処理を継続するための最大エラー・レベルを指定します。 デフォルト値は 4です。 バインダー・サブコマンドの戻り値が Numberより大きい場合、追加のバインダー・サブコマンドは処理されません。 停止レベル値が 8 以上の場合、出力ファイルが生成されると、その出力ファイルは実行可能ファイルではない可能性があります。 戻り値は次のとおりです。
|
| I:FileID または import:FileID | (i の大文字) 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 | (小文字の L) 各バインダー・サブコマンドとその結果を FileID に書き込みます。 デフォルトでは、ファイルは作成されません。 |
| libpath: Path | 出力ファイルのローダー・セクションに書き込む時のライブラリー・パスとして Path を使用します。 -lフラグで指定されたライブラリを検索する際には、パスの有効性はチェックされず、使用されない。 Path は、 -L フラグの使用時に生成されるすべてのライブラリー・パスをオーバーライドします。 -L フラグを指定しないか、または nolibpath オプションを指定すると、デフォルトのライブラリー・パス情報が出力ファイルのローダー・セクションに書き込まれます。 デフォルトのライブラリー・パス情報は、 LIBPATH 環境変数が定義されている場合はその値、定義されていない場合は /usr/lib:/libの値です。 |
| 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 より大きいためにいずれかの変数への再配置がオーバーフローした場合に、重大エラー・メッセージを生成します。 出力ファイルが作成された場合は、正しく実行されません。 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 | このオプションにより、読み取り専用 CSECT はインポートされたシンボルを参照できます。 このオプションはデフォルトです。 |
| noforkpolicy | 64 ビット・プログラムをリンクするときに、XCOFF 補助ヘッダーで _AOUT_FORK_POLICY フラグおよび _AOUT_FORK_COR フラグをクリアします。 fork ツリー・ポリシーが VMM_CNTRL 環境変数と一緒に指定されていない限り、デフォルトの fork ツリー・ポリシーが使用されます。 32 ビット・プログラムをリンクする場合、このフラグは無視されます。 このオプションはデフォルトです。 |
| nogc | このオプションは、ガーベッジ・コレクションを防止します。 グローバル・シンボルが入っているすべてのオブジェクト・ファイル内の CSECT は、参照されるかどうかに関係なく保持されます。 デフォルトは gc オプションです。 |
| noglink | ld コマンドがグローバル・リンケージ・コードを挿入しないようにします。 デフォルトでは、バインダーはグローバル・リンケージ・コードを挿入します。 |
| noipath | コマンド・ラインにリストされる共有オブジェクトの場合、出力ファイルのローダー・セクションに共有オブジェクトをリストするときには、-l フラグで指定するのではなく、ヌル・パス・コンポーネントを使用します。 -l フラグで指定された共有オブジェクトには、常にヌル・パス・コンポーネントが使用されます。 このオプションでは、インポート・ファイル内で #! で始まる行を使用するのでパス・コンポーネントの指定への影響はありません。 デフォルトは ipath オプションです。 |
| nolibpath | -L フラグによって生成された、または libpath オプションによって指定された、以前のライブラリー・パスをオーバーライドします。 代わりに、デフォルトのライブラリー・パス情報が、出力ファイルのローダー・セクションに書き込まれます。 デフォルトのライブラリー・パス情報は、LIBPATH 環境変数が定義されている場合はその値であり、定義されていない場合は /usr/lib:/lib です。 |
| noloadmap | nl オプションと同じように機能します。 |
| nolpdata | 実行可能ファイルの XCOFF ヘッダー内の F_LPDATA ビットをクリアします。 このビットが設定されない場合は、このプロセスでは、そのデータ用にスモール (通常) ページが使用されることになります。 |
| nom | このオプションでは、出力ファイルの作成に使用されるオブジェクト・ファイルはリストされません。 このオプションを指定すると、-m フラグがオーバーライドされます。 このオプションはデフォルトです。 |
| noobjreorder | このオプションは、深さ優先 CSECT の再配列ロジックを使用しません。 次の場合を除き、出力ファイル内の CSECT は、オブジェクト・ファイルとライブラリー・ファイルをコマンド・ラインで指定した時と同じ順序で配置されます。
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 命令に対して指定した特殊な値をオーバーライドされます。 この形式を使用すると、このオプションは繰り返すことができます。 最後に指定されるマシン・インストラクションは、モジュール内ブランチの後にバインダーによって生成される命令です。 他の指定された機械命令は、ノーオペレーション命令として再編成されますが、望ましいノーオペレーション命令に変換されます。 |
| noquiet | 各バインダー・サブコマンドとその結果を標準出力に書き出します。 デフォルトは quiet オプションです。 |
| noreorder | このオプションは、すべての XMC_TC (TOC アドレス定数) および XMC_TD (TOC 変数) CSECT を結合してデータ・セクションに配置し、すべての BSS シンボルを結合して bss セクションに配置する以外は、CSECT を再配列しません。 他のすべての CSECT はテキスト・セクションに配置されるので、出力ファイルにはテキストとデータが混在します。 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:仕様 | 出力ファイルでいくつかのシンボルがマップされる順序を制御します。 指定は以下のとおりです。
|
| pD:起点 | データ・セクションの先頭を含むファイル・ページの最初のバイトのアドレスとして Origin を指定します。 例えば、データ・セクションがオブジェクト・ファイル内のオフセット 0x22A0 で始まり、 pD:0x20000000 が指定されている場合、データ・セクションの最初のバイトにはアドレス 0x200002A0が割り当てられます。 このオプションは、ページ・サイズが 4096 (0x1000) バイトであることを想定しています。注: -bpD フラグと -D フラグの両方が指定されている場合は、後者のフラグが優先されます。
|
以前に指定したプラグイン・パスを取り消す場合は、 -bplugin:である path 変数を指定しないでください。 入力ファイルがビットコード・ファイルであったりビットコード・ファイルを含むアーカイブであったりする場合に、プラグイン・パスが指定されていないと、ld コマンドは失敗します。 |
|
plugin_opt オプションは複数回指定できます。 通常、このオプションはコンパイラーによって生成されます。 |
|
| pT:起点 | テキスト・セクションの先頭を含むファイル・ページの最初のバイトのアドレスとして Origin を指定します。 例えば、テキスト・セクションがオブジェクト・ファイル内のオフセット 0x264 で始まり、 pT:0x10000000 が指定されている場合、テキスト・セクションの最初のバイトにはアドレス 0x10000264が割り当てられます。
|
| quiet | このオプションは、バインダー・サブコマンドとその結果を標準出力に書き込みません。 このオプションはデフォルトです。 |
| 項目 | 説明 |
|---|---|
| R:FileID | map:FileID オプションと同じように機能します。 |
| r または reorder | save コマンド処理の一部として CSECT をリオーダーします。 リオーダー・プロセスは、参照を近接させて同じストレージ・マッピング・クラスの CSECT を配置します。 このオプションはデフォルトです。 |
| 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 の自動ロードを指定できます。
インポート・ファイルを作成した後、インポート・ファイルをメンバーとしてアーカイブに追加します。 -bautoload オプションを使用して、アーカイブ・メンバー foo.o の自動ロードを指定することもできます。-bautoloads オプションを使用して、より多くのアーカイブ・メンバーを指定することができます。 インポート・ファイルの 1 行目が |
| rtllib | このオプションには、ランタイム・リンカーへの参照が含まれます。 ランタイム・リンカーは librtl.aで定義され、暗黙的な -lrtl フラグがコマンド行に自動的に追加されます。 このオプション ( rtl オプションによって暗黙指定される) は、メインプログラムをリンクするとき、またはランタイム・リンクが発生しないときに使用する必要があります。 このオプションで共有オブジェクトをリンクする必要はありません。 svr4 オプションを使用しない場合、デフォルトは nortllib オプションです。 |
| rwexec | プロセスの専用データ域の実行許可が、システムの sed_config 設定に従って決定されることを指定します。 このオプションはデフォルトです。 |
| rwexec_must | システムの sed_config 設定に関係なく、プロセスの専用データ域に実行許可があることを指定します。 |
| S: Number | -S フラグと同じように機能します。 |
| scalls:FileID | オブジェクト・ファイルのアドレス・マップを FileID に書き込みます。 シンボルはアルファベット順にリストされます。 マップにリストされるシンボルごとに、そのシンボルから他のシンボルへの参照がリストされます。 デフォルトでは、ファイルは作成されません。 scalls オプションについて詳しくは、 アドレス・マップを参照してください。 |
| shared | dynamic オプションと同じように機能します。 |
| 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-bit and 64-bit Import File Options
項目 説明 32 このオプションは、インポート・ファイルまたはエクスポート・ファイルで使用され、32 ビット・モードでリンクする場合は後続のシンボルを処理する必要があるが、64 ビット・モードでリンクする場合は無視することを指定します。 32 オプションまたは 64 オプションを指定しない場合、すべてのシンボルが 32 ビットと 64 ビットの両方のモードで処理されます。 64 このオプションは、インポート・ファイルまたはエクスポート・ファイルで使用され、64 ビット・モードでリンクする場合は後続のシンボルを処理する必要があるが、32 ビット・モードでリンクする場合は無視することを指定します。 32 オプションまたは 64 オプションを指定しない場合、すべてのシンボルが 32 ビットと 64 ビットの両方のモードで処理されます。 no32 または no64 以前の 32 または 64 をオーバーライドします。 以降のシンボルは、32 ビットと 64 ビットの両方のモードで処理されます。 - インポート・ファイルを処理する場合、#! (番号記号、感嘆符) で始まる行は、後続のインポート・シンボルに関連付けられる共有ライブラリー名を提供します。 この行は複数回現れ、
#!で始まる次の行が読み取られるまで後続のシンボルに適用されます。 このファイル名情報は、XCOFF オブジェクト・ファイルのローダー・セクションに置かれます。 これは、実行時に適切なオブジェクト・ファイルを見つけるためにシステム・ローダーによって使用されます。 インポートファイル名が「ipath/ifile(imember)である場合、ローダーセクションに配置されるファイル名は、インポートファイル名とインポートファイルの「#!行の内容に基づいて、以下のように決定される:項目 説明 #! ( #!の後には何もない) ヌル・パス、ヌル・ファイル、およびヌル番号を使用します。 このオプションは、システム・ローダーによって据え置きインポートとして扱われます。#! () ipath、ifile、imemberを使います。 この行は、インポート・ファイルをコマンド・ラインで InputFile パラメーターとして指定している場合に使用できます。 この場合、ファイルは#!で始まらなければなりません。 また、この行は、他の#!行によって変更されている場合に、デフォルトの名前を復元するために使用することもできます。#! path/ファイル (メンバー) 指定されたパス、指定されたファイル、指定されたメンバーを使います。 #! path/ファイル 指定されたパス、指定されたファイル、およびヌル・メンバーを使います。 #! ファイル ヌル・パス、指定されたファイル、およびヌル・メンバーを使います。 実行時にはディレクトリーのリストを検索して共有オブジェクトを見つけます。 #! (メンバー) ipath、ifile、および指定されたメンバーを使います。 実行時にはディレクトリーのリストを検索して共有オブジェクトを見つけます。#! file (メンバー) ヌル・パス、指定されたファイル、指定されたメンバーを使います。 実行時にはディレクトリーのリストを検索して共有オブジェクトを見つけます。 #! . (1 つのドット) この名前は、メインの実行可能ファイルを参照します。 別の名前を持つ複数のメインプログラムからシンボルをインポートする共有オブジェクトを作成する場合、このファイル名を使用します。 メインプログラムは、他のモジュールによってインポートされたシンボルをエクスポートする必要があります。そうしないと、ロードは失敗します。 このインポート・ファイル名は、ランタイム・リンカーの有無にかかわらず使用できます。 #! .. (2 つのドット) この名前は、ランタイム・リンカーによって解決されるシンボルをリストするために使用します。 このファイル名を使用して、ランタイム・リンカーを使用するプログラムによって使用される共有オブジェクトを作成します。 rtllib オプションでリンクされていないプログラムで、 .. からシンボルをインポートするモジュールを使用すると、シンボルは未解決であり、そのようなシンボルへの参照は未定義の動作になります。
-brtl オプションを使用する場合にアーカイブ・メンバーを自動的にロードするため、次のようにしてインポート・ファイルを作成できます。 shr.so がアーカイブ内の共有オブジェクトである場合、次のようにしてインポート・ファイルを作成します。
# autoload
#! (shr.so)
必要に応じて、追加のメンバー名をさらに多くの行にリストすることができます。 shr.so からインポートされたシンボルは shr.so 自体から読み取られるため、インポート・ファイル内のシンボル名をリストする必要はありません。
共有ライブラリーの作成についての詳細は、共有ライブラリーの作成を参照のこと。 ロードとバインディングの詳細については、'loadサブルーチンを参照のこと。
エクスポートされるシンボルの属性
ランタイム・リンクを使用する場合、同じモジュール内のシンボルへの参照は、シンボルが適切な属性でエクスポートされた場合にのみリバウンドできます。 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 はエクスポートされたシンボルを示します。
- そのアドレス (インポートされたシンボルを除く)
- 長さと位置合わせ (CSECT シンボル、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 (L の小文字) は、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 から取り出された CSECT は、ファイル pgm から読み取られます。 この手法は、プログラムが多くの入力ファイルから構成されており、一度に変更するファイルが少ない場合に、リンク処理を迅速に行うことができます。cc -o pgm subs1.o pgm - ライブラリー・サブルーチンとリンクするには、次のコマンドを入力します。
これは、オブジェクト・モジュール pgm.o、 subs1.o、および subs2.o、 mylib.a アーカイブからのサブルーチン、および -l (小文字の 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 は、カーネルまたは /usr/lib/boot/unix ファイルに含まれているシステム・コール関数をインポートするように ld コマンドに指示します。 -bnso オプションでリンクする場合、この例で -bI:/lib/syscalls.exp オプションによって行われたように、共有オブジェクト内でインポートとエクスポートの両方 (つまりパススルー) が行われたすべてのシンボルを、常に明示的にインポートしなければなりません。cc -o pgm pgm.o -bnso -bI:/lib/syscalls.exp注: /usr/lib/libc.a が非共有でリンクされている場合はいつでも、フラグ -bI:/lib/syscalls.exp を使用する必要があります。 オペレーティング・システムの更新リリースがインストールされると、常にアプリケーションを再リンクする必要があります。 静的にリンクされたアプリケーションは、どのフィックスまたはリリース・レベルからも他のフィックスまたはリリース・レベルにもバイナリー・ポータブルではありません。 - ランダム化属性を有効にするには、以下のコマンドを入力する:
-baslrテキスト・セクションの再配置が存在する場合は、テキストおよびデータのランダム化を有効にしないでください。
- テキストとスタックのみのランダム化を有効にするには、以下のコマンドを入力する:
-baslr:ts
ファイル
| 項目 | 説明 |
|---|---|
| /usr/bin/ld | ld コマンドが入っています。 |
| /usr/lib/lib*.a | プログラムのリンクに使用されるライブラリーを指定します。 |
| a.out | デフォルトの出力ファイル名を指定します。 |