ld コマンド

目的

オブジェクト・ファイルをリンクします。

構文

ld [ -DNumber ] [ -eLabel ] [ -G ] [ -HNumber ] [ -K ] [ -m ] [ -M ] [ -oName ] [ -r ] [ -s ] [ -SNumber ] [ -TNumber ] [ -u Name ] ... [ -v ] [ -V ] [ -z ] [ -ZString ] ... [ -bOption ] ... [ -LDirectory ] ... { -fFileID ... -lName ... InputFile ... }

または

ld -bsvr4 [ -d[y | n] ] [ -D Number ] [ -e Label ] [ -G ] [ -HNumber ] [ -K ] [ -m ] [ -M ] [ -oName ] [ -r ] [ -R Path ] [ -s ] [ -SNumber ] [ -TNumber ] [ -u Name ] ... [ -v ] [ -V ] [ -z [defs | nodefs] ] [ -z multidefs ] [ -z [text | nowarntext | warntext] ] ] [ -ZString ] ... [ -bOption ] ... [ -LDirectory ] ... { -fFileID ... -lName ... 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 フラグは、-b フラグを Iimport、または keepfile オプションと共に使用しています)。

オペレーティング・システム上で実行するプログラムを作成する場合は、cc コマンドを使用してファイルをリンクしてください。 cc コマンドは共通オプションと必要なサポート・ライブラリーを指定して ld コマンドを呼び出すので、コマンド・ラインにそれらのオプションとライブラリーを指定する必要はありません (この情報は、/etc/xlC.cfg または /etc/vac.cfg の構成ファイルから読み取られます)。

リンク・モード

ld コマンドは、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 ファイルです。 エクスポート・ファイルのフォーマットは、インポート・ファイルと同じです。

ライブラリー

ライブラリーは、.a で終わる名前のファイルです。ライブラリーによっては .so で終わる場合もあります。 ライブラリーを指定するには、絶対パス名または相対パス名を指定する方法と、-l (L の小文字) フラグを -lName フォーマットで使用する方法があります。 後者のフォーマットでは、libName.a ファイルを指定します。rtl オプションを使用する場合は、いくつかのディレクトリーから検索する libName.so ファイルを指定します。これらの検索ディレクトリーには、-L フラグで指定したディレクトリーと、標準ライブラリー・ディレクトリーである /usr/lib/lib が含まれます。

注: 共用オブジェクト、または共用オブジェクトを含むアーカイブ・ファイルを、-lName フラグの代わりに絶対パス名または相対パス名で指定すると、そのパス名は出力ファイルのローダー・セクションのインポート・ファイル ID 文字列に含まれます。 -bnoipath オプションによってこの動作をオーバーライドできます。

処理

ld コマンドは、すべての入力ファイルを、アーカイブ・ファイルであるかどうかに関係なく同様に処理します。 このコマンドは、すべてのオブジェクトのシンボル・テーブルを組み込み、既存のシンボルと重複するシンボル定義のみを廃棄します。 他のバージョンの ld コマンドとは異なり、参照が定義よりも先になるようにアーカイブ・ファイルを並べ替える必要はありません。 また、同じアーカイブ・ファイルをコマンド・ラインで何度もリストする必要もありません。

ld コマンド・フラグの順序は、入力オブジェクト・ファイル、ライブラリー、およびインポート・ファイルを除けば、コマンドの処理方法には影響を与えません。 このコマンドのフラグには、 -L-f-l (L の小文字)、-bkeepfile-bI (i の大文字) があります。 これらのフラグは、次の順序で処理されます。

  1. -L フラグは、-l (L の小文字) フラグで指定したライブラリーを見つけるために、検索ディレクトリーのリストにディレクトリーを追加します。各ディレクトリーは指定した順序で検索されます。 すべての -L フラグは、-l フラグよりも先に処理されます。
  2. ld コマンドは、InputFile パラメーターと、-f フラグで指定したファイルと、-l (L の小文字) フラグで指定したライブラリーを、指定した順序で処理します。
  3. ld コマンドは、他のすべてのオブジェクト・ファイルとライブラリーを処理した後で、-bI (i の大文字) フラグで指定したインポート・ファイルを、指定した順序で処理します。 インポート・ファイルを他のオブジェクト・ファイルよりも先に処理する必要があれば、 -bI フラグを付けずにインポート・ファイルを入力ファイルとして指定できます。 この場合、インポート・ファイルの 1 行目は #! (番号記号、感嘆符) で始まらなければなりません。 また、インポート・ファイルは、ステップ 2 で説明したように、他の入力ファイルと共に処理されます。
  4. -bkeepfile オプションでは、ld コマンドによってガーベッジ・コレクションが行われない入力ファイルを指定します。 指定した入力ファイルを InputFile パラメーターでも指定しているか、または -f フラグで指定したファイルにもリストしていると、-bkeepfile オプションはファイルの処理順序に影響を与えません。 それ以外の場合、ファイルはステップ 2 で説明したように他の入力ファイルと共に順に処理されます。

-r フラグまたは -bnox オプションを指定するか、あるいはリンク中にエラーが発生しなければ、ld コマンドで作成される出力ファイルには実行許可が設定されます。 重大エラーが発生した場合、あるいは出力ファイルを入力ファイルとして指定し、エラーが発生した場合、既存の出力ファイルは上書きされません。

シンボル

ld コマンドでは、次の事前定義シンボルを使用して特殊なアドレス位置を指定します。また、 C 構文で extern char name[ ] として宣言できます。

項目 説明
_text プログラムの最初のロケーションを指定します。
_etext プログラムの後の最初のロケーションを指定します。
_data データの最初のロケーションを指定します。
_edata 初期化されたデータの後の最初のロケーションを指定します。
_end または end すべてのデータの後の最初のロケーションを指定します。

これらのシンボルを使用するには、そのアドレスを指定しなければなりません。 入力ファイルで 6 つのうちいずれかのシンボルを再定義すると、予測できない結果が生じることがあります。 追加の事前定義シンボル _ptrgl は、コンパイラーで関数ポインターによる呼び出しを実現するために使用します。

ガーベッジ・コレクション

デフォルトでは、ld コマンドはガーベッジ・コレクションを行い、出力ファイルの生成時に参照されない制御セクション (CSECT) を削除します。

CSECT は、コードまたはデータの非表示ユニットです。 CSECT は、他の CSECT に入っているシンボルを参照する再配置エントリー (RLD) が入っていると、その 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
注: -bsvr4 オプションが ld コマンド・ラインに指定されている場合は、-R および -z オプションは再定義されます。

ld コマンドでサポートされないフラグを指定すると、エラー・メッセージが表示されます。 サポートされないフラグがすべて診断された後、ld コマンドはそれ以上処理を行わずに終了します。

フラグ

ld コマンドは XPG Utility Syntax Guidelines に準拠していますが、引数 はコマンド・ラインの残りのオペランドではなく、次のオペランドのみに適用されます。例えば、次のコマンド・ラインがあるものとします。

ld -- -s -v

-s はファイル名として処理され、-v はフラグとして処理されます。 -v をファイル名として処理させるには、次のように指定します。

ld -- -s -- -v 
注: オペランドの付いたフラグは、フラグとオペランドの間にスペースを入れて入力しても、入れずに入力してもかまいません。数値は 10 進、8 進 (先行 0 を付ける)、または 16 進 (先行 0x または 0X を付ける) フォーマットで指定できます。 競合するフラグをコマンド・ラインで指定すると、ld コマンドは最後のフラグを受け入れて、それ以前のフラグを無視します。
項目 説明
-b Option 特殊処理オプションを指定します。このフラグは繰り返すことができます。 この種のオプションの詳細については、オプション (-bOptions)を参照してください。
-d [ y | n] -dy が指定されると、 ld はダイナミック・リンクを使用します。 このオプションは、 -b so オプションに等価です。 -dn が指定されると、 ld はスタティック・リンクを使用します。 このオプションは -b nso オプションに等価です。 デフォルトは -dy です。 このオプションは -bsvr4 オプションが指定されているときにのみ有効です。
-DNumber 出力ファイルの初期化済みデータ (データ・セクション) の開始アドレスを、Number に指定します。 指定した数値が 1 であれば、データ・セクションはテキスト・セクションのすぐ後から始まります。 デフォルトでは、データ・セクションは位置 0 から始まります。

-D フラグと -bpD フラグの両方が指定される場合、後者のフラグが優先されます。

注: システム・ローダーは、実行時にデータ・セクションを再配置するので、指定した番号はアドレス・マップにリストされたアドレス、あるいは dump または nm コマンドなどのユーティリティーで出力されるアドレスにのみ影響を与えます。
-eLabel 実行可能出力ファイルのエントリー・ポイントを Label に設定します。 デフォルトのエントリー・ポイントは __start (2 つのアンダースコアーと start) です。
-fFileID 処理する入力ファイルのリストが入っているファイルを指定してください。 FileID には、入力ファイル名のリストを指定しなければなりません。 FileID 内の各行は、ld コマンド・ラインで別々にリストした場合と同様に処理されます。 ファイル内の行には、* (アスタリスク)、[ (左大括弧)、] (右大括弧)、? (疑問符) などのシェル・パターン文字を使用できます。 これらの文字は、glob サブルーチンを使用して拡張され、複数のオブジェクト・ファイルを指定できます。
-G 実行時リンカーで使用可能な共有オブジェクトを作成します。 -G フラグを指定するのは、-b フラグと共に erokrtlnortllibnosymbolicnoautoexp、および M:SRE オプションを指定するのと同じです。 以降のオプションにより、これらのオプションをオーバーライドできます。
-HNumber 出力ファイルのテキスト、データ、ローダー・セクションは、各セクションが Number の倍数であるファイル・オフセット上で始まるように位置合わせされます。 値 1 を指定すると、位置合わせは行われません。 値 0 を指定すると、ローダー・セクションはワード境界上で位置合わせされ、テキスト・セクションとデータ・セクションは、各セクション内の CSECT の位置合わせを満たすように境界上で位置合わせされます。 デフォルト値は 0 です。

指定した Number によって CSECT が出力ファイル内で位置合わせされなければ、ld コマンドは警告を表示し、出力実行可能ファイルはロードまたは実行されません。

-K 出力ファイルのヘッダー、テキスト、データ、およびローダー・セクションを、各セクションがページ境界上で始まるように位置合わせされます。 このフラグの効果は、 -HNumber を指定するのと同じです。この場合、Numberld を実行中のコンピューターのページ・サイズです。
-l Name libName.a ファイルを処理します。動的モードの場合、rtl オプションを使用して、libName.a または libName.so ファイルを処理します。いずれの場合でも、-L フラグで指定したディレクトリーまたは標準ライブラリー・ディレクトリー (/usr/lib および /lib) を検索して、ファイルを見つけます。 rtl オプションを使用する動的モードの場合、libName.so または libName.a のどちらかを含んでいる最初のディレクトリーが検索条件を満たします。同じディレクトリーに両方のファイルが見つかった場合、libName.so が使用されます。このフラグは繰り返すことができます。 動的モードについての詳細は、実行時リンクを参照してください。
注: シンボルの最初の定義は、そのシンボルへの定義がアーカイブの読み取り時に表示されなくても保持されます。 ld コマンドの他のバージョンでは、アーカイブ内で定義されたシンボルは、アーカイブの読み取り時にそのシンボルへの参照が表示されなければ無視されます。
-LDirectory -l (L の小文字) フラグで指定したライブラリーを検索する検索ディレクトリーのリストに、Directory を追加します。 -blibpath-bnolibpath、または -bsvr4 オプションを使用しなければ、標準ライブラリー・ディレクトリーなどのディレクトリーのリストは、システム・ローダーで使用される出力オブジェクト・ファイルのローダー・セクションにも記録されます。 このフラグは繰り返すことができます。
-m または -M 出力ファイルを作成するために処理されるすべてのファイルとアーカイブ・メンバーの名前を標準出力にリストします。 共用オブジェクトとインポート・ファイルはリストされません。
-oName 出力ファイル Name を指定します。 デフォルトでは、出力ファイル名は a.out です。
-r 別の ld コマンドの呼び出しに入力ファイルとして使用する非実行可能出力ファイルを作成します。 このファイルには、未解決のシンボルが入っていることもあります。 -r フラグを指定するのは、-b フラグと共に eroknoglinknox、および nogc オプションを指定するのと同じです。 (以降のオプションにより、これらのオプションをオーバーライドできます。)
-R Path -bsvr4 オプションが ld コマンド・ラインに指定されているときにのみ有効です。 これは、ランタイム・リンカーにライブラリー検索ディレクトリーを指定する際に使用される、 コロンで分離されたディレクトリーのリストを定義します。 Path があり、NULL でない場合、Path は出力ファイルのローダー・セクションに記録されます。 このオプションは、次に、共用ライブラリーに実行可能ファイルをランタイムにリンクするときに使用されます。 このオプションの複数インスタンスは、コロンで分離された各 Path に連結されます。
-s シンボル・テーブル、行番号および再配置情報を、出力ファイルの作成時に除去します。 除去することによって、スペースは節約されますが、デバッガーが使用できなくなります。 また、strip コマンドを使用しても、既存の実行可能ファイルを除去できます。
注: 非共用オブジェクトは、除去されているとリンクできません。 共用オブジェクトは除去できますが、除去された共用オブジェクトは静的リンク時には使用できません。
-S Number 出力実行可能プログラムの実行時に、ユーザー・スタックの最大許容サイズを (バイト単位で) 指定します。 この値は補助ヘッダーに保管され、システム・ローダーが soft ulimit を設定するときに使用されます。 デフォルト値は 0 です。

大容量ユーザー・スタックおよび 32 ビット・プログラムについて詳しくは、 プログラミングの一般概念: プログラムの作成およびデバッグの『Large Program Support Overview3』を参照してください。

-T Number 出力ファイルのテキスト・セクションの開始アドレスを Number に設定します。 デフォルト値は 0 です。

-T フラグと -bpT フラグの両方が指定される場合、後者のフラグが優先されます。

注: システム・ローダーは、実行時にテキスト・セクションを再配置するので、指定した番号は アドレス・マップにリストされたアドレス、あるいは nm または dump コマンドなどのユーティリティーで出力されるアドレスにのみ影響を与えます。
重要: 番号0x1000xxxxxxx であり、リンクされたプログラムが 64 ビットのプログラムである場合、システム・ローダーは、アドレス 0x10000000000 にあるセグメントから開始して、実行可能テキストをメモリーに読み込みます。
-uName 外部シンボル Name のガーベッジ・コレクションを停止します。 指定したシンボルが存在しなければ、警告メッセージが表示されます。 このフラグは繰り返すことができます。
-v バインダー・コマンドの実行に関する付加情報をロード・マップ・ファイルに書き込みます。
-V ld のバージョン・ストリングを標準エラー (標準エラー出力) に書き込みます。
-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 オプションが指定されているときにのみ有効です。
-ZString -l (L の小文字) フラグで指定したライブラリーの検索時に、標準ライブラリー・ディレクトリー名に接頭部 String を追加します。 例えば、-Z/test フラグと -lxyz フラグを指定すると、ld コマンドは /test/usr/lib/libxyz.a および /test/lib/libxyz.a ファイルを検索します。 -ZString フラグを使用すると、標準ライブラリー・ディレクトリーは検索されません。 このフラグは、出力ファイルのローダー・セクションに保管されているライブラリー・パス情報には影響を与えません。 このフラグは、新しいバージョンのライブラリーを作成する場合に使用します。 このフラグは繰り返すことができます。

バインダー

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)

次の値は、-b フラグの Options 変数に有効な値です。 -b フラグの後に複数のオプションを単一のブランクで区切ってリストできます。
注:
  1. 次のバインダー・オプションのリストで、または という語で 区切られた 2 つのオプション名は同義語です。
  2. FileID はパス名を示します。相対パス名または絶対パス名のどちらも使用できます。
  3. 引数の前の反復できないオプションの場合は、ヌル引数を使用してオプションをオフにできます。つまり、オプションとコロンのみを指定します。
  4. 競合するオプションを指定すると、最後に指定したオプションが優先されます。

項目 説明
32 32 ビット・リンク・モードを指定します。 このモードでは、すべての入力オブジェクト・ファイルが XCOFF32 ファイルでなければなりません。そうでなければエラーが報告されます。 XCOFF64 アーカイブ・メンバーは無視されます。 特定のシンボルのモードを指定してファイルをインポートまたはエクスポートすると、64 ビットシンボルは無視されます。 -b32 オプションと -b64 オプションの両方を指定すると、最後に指定したオプションが使用されます。 いずれのオプションも指定しないと、環境変数 OBJECT_MODE の値によってモードが決定されます。
64 64 ビット・リンク・モードを指定します。 このモードでは、すべての入力オブジェクト・ファイルが XCOFF64 ファイルでなければなりません。XCOFF64 ファイルでない場合、エラーが報告されます。 XCOFF32 アーカイブ・メンバーは無視されます。 特定のシンボルのモードを指定してファイルをインポートまたはエクスポートすると、32 ビットシンボルは無視されます。 -b32 オプションと -b64 オプションの両方を指定すると、最後に指定したオプションが使用されます。 いずれのオプションも指定しないと、環境変数 OBJECT_MODE の値によってモードが決定されます。
asis すべての外部シンボルが大文字と小文字を区別せずに処理されます。 これがデフォルトです。 すべての外部シンボルを大文字で処理する方法については、caps オプションの 説明を参照してください。
autoexp 出力モジュールからいくつかのシンボルを自動的にエクスポートします。エクスポート・ファイルにリストする必要はありません。 (このオプションは、出力モジュールからのすべてのシンボルはエクスポートしません。 -bexpall オプションを使用してすべてのシンボルをエクスポートします。) これがデフォルトです。 メインプログラムをリンクするときにこのオプションを使用します。 リンカーは、S で始まるモジュール型を (M オプションまたは modtype オプションで) 指定せず、また noentry オプションを使用しない場合に、メインプログラムをリンクしているものと仮定します。

autoexp オプションを使用するときに、コマンド・ラインにリストされたいくつかの共有オブジェクトが特別なファイル . (ドット) からシンボルをインポートして、リンクされるモジュールにシンボルのローカル定義が含まれる場合、シンボルは自動的にエクスポートされます。

rtl オプションでリンクすると、その他のシンボルも自動的にエクスポートされます。 リンクされるモジュール内で定義されたシンボルに、コマンド・ラインにリストされた共有オブジェクトからエクスポートされた追加定義が 1 つ以上ある場合、また、定義のいずれかが BSS シンボルである場合、シンボルは自動的にエクスポートされます。 リンクされるモジュール内の定義が BSS シンボルである場合、シンボルは nosymbolic 属性でエクスポートされます。 その他の場合、シンボルは symbolic 属性でエクスポートされます。 シンボルが別のエクスポート属性でエクスポート・ファイル内にリストされる場合、明示的な属性が使用されます。

autoexp オプションで自動的にシンボルをエクスポートしても、シンボルが list 属性でエクスポート・ファイル内にリストされる場合、シンボルはエクスポートされません。

autoimp または so 入力ファイルとして指定した共用オブジェクトからシンボルをインポートします。 共用オブジェクトは参照されますが、出力オブジェクト・ファイルの一部としては含まれません。 これはデフォルトです。
autoload: path/file(member) アーカイブ・メンバーを自動的に読み込みます。
bigtls 出力オブジェクトまたはプログラム内のスレッド・ローカル・ストレージのサイズが 64 KB より大きく、local-exec または local-dynamic のスレッド・ローカル変数への直接参照を生成するコンパイラーが使用された場合に、余分なコードを生成します。16 ビット・オフセットでアドレッシングできないスレッド・ローカル変数への直接参照ごとに、余分なコードが必要です。余分なコードを含むプログラムはローパフォーマンスになる可能性があるため、このオプションを使用するよりも、直接参照を使用するスレッド・ローカル変数の数を減らした方が得策といえます。デフォルト・オプションは、nobigtls オプションです。
bigtoc 目次 (TOC) のサイズが 64 K バイトよりも大きい場合に、余分のコードを生成します。 余分のコードは、16 ビット・オフセットでアドレッシングできない TOC シンボルへのすべての参照に必要です。 生成されたコードが入っているプログラムはパフォーマンスが低下することがあるので、このオプションを使用する前に、プログラムに必要な TOC エントリーの数を減らします。 デフォルトは nobigtoc オプションです。
bindcmds:FileID ld コマンドで生成されたバインダー・コマンドのコピーを、FileID に書き込みます。 結果として生成されるファイルは、バインダー・プログラムをスタンドアロン・プログラムとして呼び出すときに、標準入力としてリダイレクトできます。 デフォルトでは、ファイルは作成されません。
binder:FileID FileID ld コマンドで呼び出すバインダーとして使用します。 デフォルトのバインダーは /usr/ccs/bin/bind ファイルです。
bindopts:FileID バインダー・プログラムの引数のコピーを FileID に書き込みます。 結果として作成されたファイルは、バインダー・プログラムをスタンドアロン・プログラムとして呼び出すときに使用します。 デフォルトでは、ファイルは作成されません。
C:FileID または calls:FileID 出力オブジェクト・ファイルのアドレス・マップを FileID に書き込みます。 シンボルはセクション別にソートされてから、アドレス別にソートされます。 マップにリストされるシンボルごとに、シンボルから他のシンボルへの参照がリストされます。 デフォルトでは、ファイルは作成されません。 calls オプションの詳細については、 アドレス・マップを参照してください。
caps すべての外部シンボルを大文字で処理します。 デフォルトは asis オプションです。
cdtors[:[ incl][:[nnn] [ :order]]] リンカーは C++ 静的コンストラクターまたはデストラクター関数に関する情報を収集し、この情報を出力ファイルに保存します。incl サブオプションは、保存情報を作成するときに、どのアーカイブ・メンバーを検索するかをリンカーに伝えます。使用できる値は、次のとおりです。
すべて
すべてのアーカイブのすべてのメンバーでコンストラクターまたはデストラクター関数を検索します。これはデフォルトです。
mbr
メンバーが出力ファイルに含まれている場合にのみ、コンストラクターまたはデストラクター関数を検索します。mbr 値を使用することは、-qtwolink および -bsvr4 オプションを使用するのと同等です。
csect
アーカイブから組み込まれる csects でのみ、コンストラクターまたはデストラクター関数を検索します。csect 値を使用することは、-bsvr4 オプションなしで -qtwolink オプションを使用するのと同等です。

nnn サブオプションは、出力モジュールの優先順位を指定します。この優先順位は、プログラムが複数のモジュールを同時にロードする場合に、モジュールの初期化順序を制御するために使用されます (出力ファイルがプログラムであり、共用オブジェクトでない場合、この優先順位は無視されます)。指定可能な優先順位の範囲は、-2 31 から 231-1 です。デフォルトの優先順位は 0 です。-231 から -231+1023 の範囲の値は、C++ ランタイム初期化用に予約されています。

order サブオプションは、優先順位が同じすべての関数に対して、個別のコンストラクターまたはデストラクター関数が呼び出される順序を指定します。使用できる値は、次のとおりです。
s
関数名を基に任意の順序でソートします。これがデフォルトであり、XL C++ コンパイラーが使用する順序と互換性があります。
c
リンク順序でソートします。最初の入力ファイル内のコンストラクターまたはデストラクター関数が最初に初期化されます。アーカイブでは、最初のメンバー内の関数が最初に初期化されます。
r
逆のリンク順序でソートします。最後の入力ファイル内のコンストラクターまたはデストラクター関数が最初に初期化されます。アーカイブでは、最後のメンバー内の関数が最初に初期化されます。

このオプションは複数回指定できますが、最後に指定されたサブオプションが使用されます。未指定のサブオプションは、現行値またはデフォルト値に影響しません。例えば、-bcdtors:csect:20:s -bcdtors:::r-bcdtors:csect::20:r と同じです。デフォルトは -bnocdtors です。-bcdtors を指定した場合、これは -bcdtors:all:0:s と同等です。

注:
  1. 必要な場合、XL C++ コンパイラーは自動的にこのオプションを作成します。
  2. -binitfini オプションで指定された関数は、静的コンストラクターまたはデストラクター関数とは関係なく呼び出されます。初期化順序について詳しくは、dlopen サブルーチンを参照してください。
comprld または crld 同じアドレスにある複数の再配置エントリー (RLD) を、可能であれば結合して単一の RLD にします。 これはデフォルトです。
cror15 cror 15,15,15 (0x4def7b82) 命令を、呼び出し命令に続く特殊 no-op 命令として使用します。 デフォルト値は ori 0、0、0 (0x60000000) です。 nop オプションを参照してください。

現行レベルのシステム上でオブジェクト・ファイルをリンクするときに、各ファイルを AIX® 3.1 上で再リンクしたい場合は、このオプションを使用してください。

cror31 cror 31,31,31 (0x4ffffb82) 命令を、呼び出し命令に続く特殊 no-op 命令として使用します。 デフォルト値は ori 0、0、0 (0x60000000) です。 nop オプションを参照してください。

現行レベルのシステム上でオブジェクト・ファイルをリンクするときに、各ファイルを AIX 3.2 上で再リンクしたい場合は、このオプションを使用してください。

D: Number [/dsa] または maxdata:Number[/dsa] 実行可能プログラムを実行するときの、ユーザー・データ領域 (あるいはユーザー・ヒープ) の最大許容サイズを (バイト単位で) 指定します。 この値は補助ヘッダーに保管され、必要に応じてシステム・ローダーがソフト・データ ulimit を増やすときに使用されます。デフォルト値は 0 です。このオプションを使用すると、ユーザー・データ領域用に指定したバイト数が予約されます。 shmat 関数または mmap 関数を使用すると、プログラムがユーザー・データ領域用に予約された仮想アドレスに明示的にオブジェクトをマップしない場合があります。

32 ビット・プログラムの場合、システムにおける最大許容値は、Large Program Support 下 で稼働するプログラムの場合は 0x80000000、Very Large Program Support 下 で稼働するプログラムの場合は 0xD0000000 になります。 プログラミングの一般概念: プログラムの作成およびデバッグ の『Large Program Support Overview』を参照してください。 ゼロ以外の値を 指定すると、ユーザー・データ域はセグメント 3 から始まります。プログラムは、 指定された maxdata 値を満たすために必要な数のセグメントを使用します。

64 ビット・プログラムの場合、maxdata オプションは、プログラム・データ・ ヒープに保証される最大サイズを提供します。 どのような値を指定することもできますが、指定された maxdata 値にかかわらず、 データ域は 0x06FFFFFFFFFFFFF8 を超えることはできません。

datapsize:psize バイト数で psize のページ・サイズをデータとして要求します。 この値は、10 進数、16 進数、または 8 進数で指定できます。 数値の仕様は C プログラミング言語と同じです。 さらに、以下のように、ページ・サイズを数字のうしろに 1 文字のサフィックスとして指定できます。
  • k または K はキロまたは 0x400 バイト
  • m または M はメガまたは 0x100000 バイト
  • g または G はギガまたは 0x40000000 バイト
  • t または T はテラまたは 0x10000000000 バイト
  • p または P はペタまたは 0x4000000000000 バイト
  • x または X はエクサまたは 0x1000000000000000 バイト
例えば、-b datapsize:16k または -b datapsize:0x4000 のいずれもデータとして 0x4000 を要求して F_VARPG ビットを XCOFF ヘッダーに設定します。
dbg:Option または debugopt:Option 特殊デバッグ・オプションまたは制御オプションを設定します。 デフォルトでは、デバッグ・オプションは設定されません。

dbg:loadabs または debugopt:loadabs オプションは、出力プログラムが -T および -D フラグで指定したのと同じアドレスにロードされることを示すために使用します。 この場合、分岐絶対命令は、そのターゲットが再配置可能なシンボルであっても、(相対) 分岐命令には変更されません。 また、分岐命令が分岐絶対命令に変更されることもありません。

delcsect CSECT 内のシンボルが以前に読み込まれたオブジェクト・ファイルで定義されていた場合に、その CSECT 内のすべてのシンボルを削除します。 このオプションを指定すると、同じ関数の複数のインスタンスが同じプログラム内に存在するのを防止できます。 例えば、a.o が関数 a() を定義し、b.o が関数 a()b() を定義する場合に、-bdelcsect オプションを使用して a.ob.o をリンクすると、シンボル a()b()b.o から削除されます。したがって、a() の 2 つのインスタンスは存在しません。 デフォルトは nodelcsect オプションです。
dynamic または shared リンカーに、以降の共有オブジェクトを動的モードで処理させます。 これはデフォルトです。 動的モードでは、共有オブジェクトは出力ファイルに静的には組み込まれません。 代わりに共有オブジェクトは、出力ファイルのローダー・セクションにリストされます。 rtl オプションを指定して動的モードが有効になると、.so で終わるファイルと .a で終わるファイルは -l (L の小文字) フラグで指定したライブラリーの検索を満たします。 両方が有効な場合、.so.a が同じディレクトリーに含まれていれば、前者が優先して使用されます。 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 によって指定される各ファイルには、バインダー・サブコマンドのリストが存在しなければなりません。このサブコマンドは次のように実行されます。
ex1:FileID
InputFiles の読み込み前
ex2:FileID
シンボル解決の直前
ex3:FileID
シンボル・レゾリューションの直後
ex4:FileID
出力ファイルへの書き込みの直前
ex5:FileID
出力ファイルへの書き込みの直後
expall すべてのグローバル・シンボルをエクスポートします。インポートされるシンボル、アーカイブ・メンバー内で定義された参照されないシンボル、および下線 (_) で始まるシンボルは例外です。 エクスポート・ファイル内に追加のシンボルをリストして、または expfull オプションを使用して、これらのシンボルをエクスポートできます。 このオプションは、autoexp オプションでエクスポートされるシンボルには影響しません。

このオプションを使用すると、エクスポート・ファイルの使用を禁止できません。 一方、エクスポート・ファイルの使用によって、エクスポートするシンボルの明示的な制御を提供して、別の共有オブジェクトからエクスポートされたオブジェクトとの名前の競合を気にせずに、共有オブジェクト内の他のグローバル・シンボルを使用できます。 デフォルトは、noexpall です。

expfull インポートされるシンボル以外のすべてのグローバル・シンボルをエクスポートします。エクスポートされるグローバル・シンボルには、アーカイブ・メンバー内で定義された参照されないシンボル、下線 (_) で始まるシンボル、およびモジュールのエントリー・ポイントが含まれます。 このオプションは、autoexp オプションでエクスポートされるシンボルには影響しません。 svr4 オプションが使用されない限り、デフォルトは noexpfull です。
export:FileID E:FileID オプションと同じように機能します。
f ernotok オプションと同じように機能します。
forceimprw インポートされるシンボルへの参照を含む読み取り専用 CSECT を読み取り/書き込み CSECT になるように強制実行します。デフォルトは noforceimprw です。
forkpolicy:policy 64 ビット・プログラムをリンクするときに、XCOFF 補助ヘッダーで _AOUT_FORK_POLICY フラグおよび _AOUT_FORK_COR フラグを設定します。 policycor である場合は、_AOUT_FORK_COR フラグも設定され、プログラムの実行時にコピー・オン・リファレンス fork ツリー・ポリシーの使用を要求します。policycow である場合、_AOUT_FORK_COR フラグがリセットされ、プログラムの実行時にコピー・オン・ライト fork ツリー・ポリシーの使用を要求します。32 ビット・プログラムをリンクする場合、このフラグは無視されます。デフォルトは noforkpolicy です。
gc ガーベッジ・コレクションを実行します。 一部またはすべてのオブジェクト・ファイルに関してガーベッジ・コレクションを禁止するには、nogcgcbypasskeepfile オプションを使用します。 これはデフォルトです。
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 以上の場合、出力ファイルが作成されれば、その出力ファイルは実行可能でなくなります。 戻り値は次のとおりです。
0
エラーなし
4
警告
8
エラー
12
重大なエラー
16
内部プログラム・エラー
I:FileID または import:FileID (i の大文字) FileID にリストされたシンボルをインポートします。 デフォルトのインポート・ファイルはありません。
initfini:[ Initial] [:Termination] [:Priority] モジュールに対して、モジュールの初期化と終了の関数を指定します。ここで Initial は初期化ルーチン、Termination は終了ルーチン、Priority は -2,147,483,648 から 2,147,483,647 までの符号付き整数値です。 少なくとも 1 つの InitialTermination を指定しなければなりません。TerminationPriority の両方を省略する場合、Initial の後のコロンも省略しなければなりません。 Priority を指定しない場合、0 がデフォルトです。 このオプションは繰り返すことができます。

このオプションは、優先順位でルーチンをソートします。最も優先度の低い (最もネガティブな) ルーチンから開始します。 このオプションは、初期化ルーチンを順に起動して、終了ルーチンを逆順に起動します。

このオプションでは、同じ優先順位のルーチンの起動順序は指定されません。しかし複数の initfini オプションで同じ優先順位を指定し、初期化ルーチンと終了ルーチンの両方を指定した場合は、ルーチンの相対順序を保持します。 例えばオプション initfini:i1:f1initfini:i2:f2 を指定すると、関数 i1i2 の起動順序は指定されません。しかし、モジュールをロードするとき i2 の前に i1 が起動されると、モジュールをアンロードするときには f1 の前に f2 が起動されます。

注:
  1. 次の範囲の優先順位は予約されています。
    -2,147,483,640 to -2,147,000,000
    -1,999,999,999 to -1,000,000,000
       -99,999,999 to -50,000,000
                 0
        50,000,000 to 99,999,999
     1,000,000,000 to 1,999,999,999
     2,147,000,000 to 2,147,483,640
  2. -binitfini オプションで指定された関数は、静的コンストラクターまたはデストラクター関数とは関係なく呼び出されます。初期化順序について詳しくは、dlopen サブルーチンを参照してください。
ipath コマンド・ラインにリストされた共有オブジェクトの場合、出力ファイルのローダー・セクション内に共有オブジェクトをリストするとき、-l フラグを指定するのではなくパス・コンポーネントを使用します。 これはデフォルトです。
keepfile:FileID FileID のガーベッジ・コレクションを防止します。 デフォルトでは、バインダーはすべてのファイル内の非参照の CSECTS を削除します。 このオプションは繰り返すことができます。
lazy モジュールの依存モジュールの、遅延ロードを使用可能にします。 このオプションは、他のフラグやオプションの後に -lrtl オプションを追加します。 -brtl オプションを指定すると、-blazy オプションは無視され、遅延ロードは使用可能にはなりません。

モジュールをリンクするとき、その依存モジュールのリストはモジュールのローダー・セクションに保管されます。 モジュールがロードされた後で、システム・ローダーは自動的に依存モジュールをロードします。 遅延ロードが使用可能である場合、モジュール内で最初に関数が呼び出されるまで、いくつかの依存に対するロードが延期されます。

モジュールへのすべての参照が関数呼び出しである場合、モジュールは遅延ロードされます。 モジュール内の変数が参照される場合、モジュールは通常の方法でロードされます。

注: 遅延ロードを使用する場合、関数ポインターの比較に注意してください。 通常、2 つの関数ポインターを比較して同じ関数を参照するかどうかを決定するために、関数は固有のアドレスを持ちます。 遅延ロードを使用してモジュールをリンクする場合、遅延ロードされるモジュール内の関数のアドレスは、他のモジュールが計算したアドレスとは一致しません。 関数ポインターの比較に依存するプログラムでは、遅延ロードを使用してはいけません。

遅延ロードについて詳しくは、 プログラミングの一般概念: プログラムの作成およびデバッグの『共用ライブラリーと遅延ロード』を参照してください。

l:FileID または loadmap:FileID (L の小文字) 各バインダー・サブコマンドとその結果を FileID に書き込みます。 デフォルトでは、ファイルは作成されません。
libpath: Path 出力ファイルのローダー・セクションに書き込む時のライブラリー・パスとして Path を使用します。 -l フラグで指定したライブラリーの検索時には、Path の妥当性検査は行われず、使用されません。 Path を指定すると、-L フラグの使用時に生成されたライブラリー・パスはオーバーライドされます。

-L フラグを指定しないか、または nolibpath オプションを指定すると、デフォルトのライブラリー・パス情報が出力ファイルのローダー・セクションに書き込まれます。 デフォルトのライブラリー・パス情報は、LIBPATH 環境変数が定義されている場合はその値で、定義されていない場合は /usr/lib:/lib です。

loadmap:FileID l:FileID オプションと同じように機能します。
lpdata F_LPDATA ビットを実行可能ファイルの XCOFF ヘッダー内に設定します。このビットが設定されると、このプロセスでは、そのデータ用にラージ・ページが要求されることになります。
項目 説明
M:ModuleType または modtype:ModuleType オブジェクト・ファイルに、2 文字のモジュール・タイプ・フィールドと共用オブジェクト・フラグを設定します。 モジュール・タイプはバインダーによって検査されませんが、次のいずれかの値でなければなりません。
1L
一度だけ使用されます。 モジュールはロードのたびにデータ・セクションのプライベート・コピーを要求します。
RE
再使用可能です。 モジュールは、モジュールに依存する各プロセスに対してデータ領域のプライベート・コピーを要求します。
RO
読み取り専用です。 モジュールは読み取り専用で、一度に複数のプロセスで使用できます。
S 接頭部は、上記のオプションのどれにでも使用され、オブジェクト・ファイル内の共用フラグを設定します。 システム・ローダーは、RO モジュールのデータ・セクションの単一のインスタンスを共用しようとします。 それ以外の場合、モジュール・タイプはシステム・ローダーによって無視されます。 デフォルト値は 1L です。
UR
リンカーに対して SGETUREGS フラグをセットします。 SGETUREGS フラグがセットされると、レジスターの内容がバッファーに保管 されます。このオプションは、coredump システム・コールで使用されます。
map:FileID または R:FileID 出力オブジェクト・ファイルのアドレス・マップを FileID に書き込みます。 シンボルはセクション別にソートされてから、アドレス別にソートされます。 デフォルトでは、ファイルは作成されません。 map オプションの詳細については、 アドレス・マップを参照してください。
maxdata:Number[/dsa] D:Number[/dsa] オプションと同じように機能します。
maxstack: Number または S:Number -S フラグと同じように機能します。
modtype: ModuleType M:ModuleType オプションと同じように機能します。
nl または noloadmap 各バインダー・サブコマンドとその結果をロード・マップ・ファイルに書き込みません。 これはデフォルトです。
noautoexp すべてのシンボルの自動的なエクスポートを防止します。 デフォルトは autoexp オプションです。
noautoimp または nso ストリップされていない共用オブジェクトを、通常のオブジェクト・ファイルとしてリンクします。 このオプションを使用すると、共用オブジェクトのローダー・セクションは使用されません。 デフォルトは autoimp または so オプションです。
注: この 2 つのフラグのどちらかを使用して、共用オブジェクト・ファイルをアプリケーションに静的にリンクします。 静的にリンクされたアプリケーションは、修正レベルまたはリリース・レベルから他の修正または リリース・レベルにバイナリーで移植されません
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 オプションを指定して、標準出力をパイプを通して teepg などのコマンドに入力している場合、このオプションを使用します。
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 は、オブジェクト・ファイルとライブラリー・ファイルをコマンド・ラインで指定した時と同じ順序で配置されます。
  • CSECT は、各 CSECT のストレージ・マッピング・クラス・フィールドに基づいて、オブジェクト・ファイルの正しいテキスト、データ、または BSS の各セッションに配置されます。
  • ストレージ・マッピング・クラスが XMC_TC (TOC アドレス定数) または XMC_TD (TOC 変数) である CSECT はすべて、まとめてグループ化されます。

noobjreorder オプションおよび noreorder オプションを同時に指定した場合は、noreorder オプションが優先されます。 デフォルトは reorder オプションです。

noorder_file シンボルを指定された順序でマップしません。このフラグは、前回の -border_file フラグの効果を否定します。これはデフォルトです。
nop:Nop ローカル・ルーチンに分岐した後で使用するノーオペレーション命令を指定します。 Nop には、特殊な値 cror15cror31ori または 8 桁の 16 進数を使用できます。 デフォルトは ori 命令です。 -bnop:cror15 オプションを指定するのは、-bcror15 オプションを指定するのと同じことです。また、-bnop:cror31 オプションを指定するのは、-bcror31 オプションを指定するのと同じことです。 特殊な nop オプションの 1 つを指定すると、それ以前に指定したすべての nop オプションはオーバーライドされます。

Nop が 8 桁の 16 進数であれば、任意の機械命令を指定します。 この機械命令は、以前に Nop 命令に対して指定した特殊な値をオーバーライドされます。 この形式を使用すると、このオプションは繰り返すことができます。

最後に指定する機械命令は、モジュール間の分岐後にバインダーで生成される命令です。 他の指定された機械命令は、ノーオペレーション命令として再編成されますが、望ましいノーオペレーション命令に変換されます。

noquiet 各バインダー・サブコマンドとその結果を標準出力に書き出します。 デフォルトは quiet オプションです。
noreorder CSECT は再配列されません。ただし、すべての XMC_TC (TOC アドレス定数) および XMC_TD (TOC 変数)の CSECT は結合されてデータ・セクションに配置されます。また、すべての BSS 記号は結合され、bss セクションに配置されます。 他のすべての 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:Specification 出力ファイルでいくつかのシンボルがマップされる順序を制御します。指定には、次のようなものが考えられます。
toc:fileref
-border_file フラグが使用される場合、順序ファイルにリストされる関数によって参照される TOC シンボルは他の TOC シンボルの前にマップされます。それ以外の場合、この指定は無視されます。
toc:nofileref
順序ファイルに基づく TOC シンボルを順序付けしません。
notoc
TOC シンボルを特別な方法で順序付けしません。
pD:Origin Origin として、データ・セクションの先頭が入っているファイル・ページの先頭バイトのアドレスを指定します。 例えば、データ・セクションがオブジェクト・ファイル内のオフセット 0x22A0 で始まる場合に、pD:0x20000000 を指定すると、データ・セクションの先頭バイトにはアドレス 0x200002A0 が割り当てられます。 これは、ページ・サイズを 4096 (0x1000) バイトと想定しています。
注: -bpD フラグと -D フラグの両方が指定される場合、後者のフラグが優先されます。
pT:Origin Origin として、テキスト・セクションの先頭が入っているファイル・ページの先頭バイトのアドレスを指定します。 例えば、テキスト・セクションがオブジェクト・ファイル内のオフセット 0x264 で始まる場合に、pT:0x10000000 を指定すると、テキスト・セクションの先頭バイトにはアドレス 0x10000264 が割り当てられます。
注: -bpT フラグと -T フラグの両方が指定される場合、後者のフラグが優先されます。追加情報については、-T フラグを参照してください。
quiet バインダー・サブコマンドとその結果を標準出力に書き出しません。 これはデフォルトです。
項目 説明
R:FileID map:FileID オプションと同じように機能します。
r または reorder save コマンド処理の一部として CSECT をリオーダーします。 リオーダー・プロセスは、参照を近接させて同じストレージ・マッピング・クラスの CSECT を配置します。 これはデフォルトです。
ras 出力モジュールがストレージ・キーとリカバリーの両面で安全性が確保されていることを示すために、出力モジュールの補助ヘッダー内にフラグを設定します。ストレージ・キーとリカバリーの両面でカーネル・エクステンションの安全性を確保する方法の詳細については、「Kernel Extensions and Device Support Programming Concepts」を参照してください。
rename: Symbol, NewName 外部シンボル SymbolNewName にリネームします。 実際には、すべてのオブジェクト・ファイル内の Symbol への定義と参照が、ファイルの処理前に NewName にリネームされたのと同じことになります。 デフォルトでは、シンボルのリネームを行いません。
reorder r オプションと同じように機能します。
ro または textro 結果的に生成されるオブジェクト・ファイルのテキスト・セクションのための、ロード時の再配置エントリーが存在しないことを確認します。 デフォルトは nro オプションです。
rtl 出力ファイルの実行時リンクを使用可能にします。 このオプションは、rtllib オプションと symbolic オプションを暗黙指定します。

動的モードが有効になると (dynamic および static オプションを参照)、rtl オプションによって -l フラグで指定された入力ファイルを .so.a で終わらせることができます。

共有オブジェクトである入力ファイルはすべて、出力ファイルのローダー・セクションではプログラムに依存するファイルとしてリストされます。 共有オブジェクトは、コマンド・ラインで指定した順にリストされます。

アーカイブに収められた共有オブジェクトは、共有オブジェクトのメンバーに対してアーカイブが自動ロードを指定している場合に限ってリストされます。 次の行を使ってインポート・ファイルを作成することにより、アーカイブ・メンバー foo.o の自動ロードを指定します。

# autoload 
#! (foo.o) 

そしてインポート・ファイルをメンバーとしてアーカイブに追加します。

-bautoload オプションを使用して、アーカイブ・メンバー foo.o に対して 自動ロードを指定することもできます。
-bautoload:<archive_name>(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 オプションの詳細については、 アドレス・マップを参照してください。
共用 dynamic オプションと同じように機能します。
shrsymtab 64 ビット・モードの場合に、XCOFF 補助ヘッダー内で _AOUT_SHR_SYMTAB フラグをセットします。 File が 64 ビット・プログラムの場合、そのプログラムの実行時に共用記号テーブルが作成されます。 Flag が 64 ビット・オブジェクトであっても 64 ビット・プログラムでない場合、_AOUT_SHR_SYMTAB フラグをセットできますが、実行時に何ら影響を及ぼしません。 32 ビット・モードでは、このフラグは無視されます。 デフォルトは noshrsymtab です。
smap:FileID オブジェクト・ファイルのアドレス・マップを FileID に書き込みます。 シンボルはアルファベット順にリストされます。 デフォルトでは、ファイルは作成されません。 smap オプションの詳細については、 『アドレス・マップ』のセクションを参照してください。
so autoimp オプションと同じように機能します。
stabcmpct: Level デバッグ・セクションのスタブ文字列の圧縮レベルを指定します。 スタブ文字列とは、長さ 8 文字を超える文字列です。 シンボル・テーブル内の各サブストリングは、デバッグ・セクションに独自のオフセットがあります。 Level に有効な値は次のとおりです。
0
圧縮しません。 重複するスタブ文字列の別のコピーがデバッグ・セクションに書き込まれます。
1
複製を削除します。 各スタブ文字列は、.debug セクションに一度ずつ書き込まれます。 シンボル・テーブル内の重複するスタブ文字列は、デバッグ・セクションへの同じオフセットを指定します。
2
スタブ文字列の番号を付けなおして、ほとんどの複製を削除します。 (一部のインスタンスでは、複数のスタブ文字列が存在することが可能です。 この場合のスタブ文字列には同じタイプを記述しますが、異なるタイプ番号を使用します。) タイプ番号の適用範囲は、C_FILE シンボル・テーブル・エントリーが示す単一の入力ファイルではなく、出力ファイル全体です。
バインダーはスタブ文字列を認識しなければエラー・メッセージを戻し、結果として生成される実行可能ファイルには有効なスタブ文字列が含まれません。 ファイルの残りの部分はエラーの影響を受けません。
stabsplit デバッグ・セクションが拡張子 .stab により代替出力ファイルに書き込まれるようにします。
stackpsize:psize バイト数で psize のページ・サイズをプロセスのメイン・スレッド・スタックとして要求します。 この値は、10 進数、16 進数、または 8 進数で指定できます。 数値の仕様は C プログラミング言語と同じです。 さらに、以下のように、ページ・サイズを数字のうしろに 1 文字のサフィックスとして指定できます。
  • k または K はキロまたは 0x400 バイト
  • m または M はメガまたは 0x100000 バイト
  • g または G はギガまたは 0x40000000 バイト
  • t または T はテラまたは 0x10000000000 バイト
  • p または P はペタまたは 0x4000000000000 バイト
  • x または X はエクサまたは 0x1000000000000000 バイト
例えば、-b stackpsize:16k または -b stackpsize:0x4000 のいずれもプロセスのメイン・スレッド・スタックとして 0x4000 を要求して F_VARPG ビットを XCOFF ヘッダーに設定します。
static リンカーに、以降の共有オブジェクトを静的モードで処理させます。 静的モードでは、共有オブジェクトは出力ファイルに静的にリンクされます。
svr4 このオプションは、コマンド・ラインの他のいくつかのオプションの意味およびリンカーの標準動作を変更します。このオプションは、リンカーに対して以下の影響を及ぼします。
  • -b rtl が設定される。
  • 実行可能ファイルの作成時または明示的に -b nortllib に設定されない場合にのみ、-b rtllib が設定される。
  • 実行可能ファイルの作成時または明示的に -b symbolic-b nosymbolic、または -b nosymbolic- のいずれかに設定されない場合にのみ、-b シンボルが設定される。
  • -b E エクスポートも -b エクスポートも存在しない場合にのみ、-b expfull が設定される。
  • -b noexpall が設定される。
  • -d が、無視される代わりに再定義され、-dy または -dn のいずれかの値が適用される可能性がある。
  • -R が、無視される代わりに、ランタイム・ライブラリー検索パスを定義する 1 つのサブオプションを受け入れる。
  • -z が、-K オプションのシノニムとなる代わりに、サブオプションとして defsnodefsmultidefstextnowarntext、または warntext のいずれかを受け入れる。
  • -L オプションを使用して指定したディレクトリーが、ランタイム・ライブラリー検索パスに組み込まれない。
sxref:FileID オブジェクト・ファイルのアドレス・マップを FileID に書き込みます。 シンボルはアルファベット順にリストされます。 マップにリストされるシンボルごとに、他のシンボルからそのシンボルへの参照がリストされます。 デフォルトでは、ファイルは作成されません。 sxref オプションの詳細については、『アドレス・マップ』を参照してください。
symbolic 明示的な属性のないエクスポートされる多くのシンボルに、symbolic 属性を割り当てます。 詳細については、エクスポートされるシンボルの属性を参照してください。 svr4 オプションが使用されると、これがデフォルトです。そうでない場合は、デフォルトは symbolic- オプションです。
textro ro オプションと同じです。
textpsize:psize バイト数で psize のページ・サイズをテキストとして要求します。 この値は、10 進数、16 進数、または 8 進数で指定できます。 数値の仕様は C プログラミング言語と同じです。 さらに、以下のように、ページ・サイズを数字のうしろに 1 文字のサフィックスとして指定できます。
  • k または K はキロまたは 0x400 バイト
  • m または M はメガまたは 0x100000 バイト
  • g または G はギガまたは 0x40000000 バイト
  • t または T はテラまたは 0x10000000000 バイト
  • p または P はペタまたは 0x4000000000000 バイト
  • x または X はエクサまたは 0x1000000000000000 バイト
例えば、-b textpsize:16k または -b textpsize:0x4000 のいずれもテキストとして 0x4000 を要求して F_VARPG ビットを XCOFF ヘッダーに設定します。
tmplrename バインダーが一般的なインスタンスを検査するように指定します。 バインダーは、__tfNNxxx_name 形式のシンボルを検査して、そのシンボルの名前を name に変更します。デフォルトは -bnotmplrename です。
注: このオプションは、32 ビット・モードにのみ必要です。このオプションは、64 ビットのオブジェクトの作成時には無視されます。
typchk 外部関数呼び出しの間で、関数パラメーター・タイプの検査を行います。 パラメーター・タイプの検査の情報はコンパイラーまたはアセンブラーによってオブジェクト・ファイルに書き込まれます。 これはデフォルトです。

タイプの検査についての詳細は、 ファイル参照の『XCOFF (a.out) File Format』を参照してください。

weaklocal 弱いシンボルが参照先のオブジェクト・ファイル内で最初に検索されることを指定します。弱いシンボルが検出されない場合は、通常の検索順序で再開されます。
x エラーが存在しなければ、出力ファイルを実行可能にします。 これはデフォルト・オプションです。
X or xref:FileID オブジェクト・ファイルのアドレス・マップを FileID に書き込みます。 シンボルはセクション別にソートされてから、アドレス別にソートされます。 マップにリストされるシンボルごとに、他のシンボルからそのシンボルへの参照がリストされます。 デフォルトでは、ファイルは作成されません。 xref オプションの詳細については、 『アドレス・マップ』のセクションを参照してください。

実行時リンク

デフォルトでは、共有オブジェクト内のシンボルへの参照は、リンク時にバインドされます。 つまり出力モジュールは、インポートされたシンボルを特定の共有オブジェクト内の定義に関連付けます。 別の共有オブジェクトが同じシンボルをエクスポートする場合でも、ロード時に指定した共有オブジェクト内の定義を使用します。

いくつかのシンボルをロード時に再バインドできるように、プログラムに実行時リンカーを使用させることができます。 実行時リンカーを使用するプログラムを作成するには、-brtl オプションでプログラムをリンクします。 共有モジュールをリンクする方法は、シンボルの再バインドに影響します。

-G フラグを使用して、実行時リンクを使用可能な共有オブジェクトを作成できます。 既存の共有オブジェクトをストリップする必要がない限り、rtl_enable コマンドでそれらを再リンクして、実行時リンクを完全に使用可能にできるようになります。

シンボル可視性

入力オブジェクト・ファイル内のグローバル・シンボルや弱いシンボルは、可視性でマークを付けることができます。4 つのシンボル可視性が定義されています。

表 1. シンボル可視性
シンボル 可視性
内部 シンボルはエクスポートされていません。シンボルのアドレスは、他のプログラムや共用オブジェクトに提供されてはなりませんが、リンカーはこのことを検査しません。
隠し シンボルはエクスポートされていません。
保護 シンボルはエクスポートされていますが、ランタイム・リンクが使用されている場合であっても再バインド (または優先使用) されることはできません。
エクスポート済み シンボルはグローバル・エクスポート属性でエクスポート済みです。

シンボルの可視性は、アセンブラー・ソース・ファイルで指定できます。一部のコンパイラーも可視性をサポートしています。詳細については、コンパイラーの資料を参照してください。

エクスポート・ファイルもシンボルの可視性を指定するために使用できます。通常、エクスポート・ファイルで指定された可視性は、オブジェクト・ファイルで指定された可視性よりも優先されます。このリンカーは、プログラムまたは共用オブジェクト用のエクスポート・リストを作成するときにシンボルの可視性を考慮に入れます。

インポートおよびエクスポート・ファイルの形式 (-bI: および -bE: フラグ)

インポート・ファイルまたはエクスポート・ファイルの各行には、シンボルの名前が含まれ、オプションでその後にアドレスまたはキーワードが続きます。 プライマリー・キーワードは、svcsvc32svc3264svc64syscallsyscall32syscall3264syscall64symbolicnosymbolicnosymbolic-listcmbssinternalhiddenprotected、および export です。追加のキーワードは weak および required で、別のキーワードと共に使用することができます。

インポート・ファイルでは、アドレスを指定すると、シンボルを、共用メモリー・セグメント内のアドレスのように固定したアドレスにマップすることができます。キーワード cmbss、または weak の いずれかを使用して、インポートされるシンボルのストレージ・クラスを指定することもできます。 autoexp オプションを使用すると、インポートされるシンボルのストレージ・クラスが、どのシンボルを自動的にエクスポートするかに影響します。 インポート・ファイルで別のキーワードを指定すると、このキーワードは無視されます。

エクスポート・ファイルでは、機能名の後に svcsvc32svc3264svc64, syscall, syscall32syscall3264、または syscall64 キーワードを使用して、機能がシステム呼び出しであることを示すことができます。これはカーネル・エクステンションをリンクする際に必要です。 出力ファイルがカーネル・エクステンションでない場合、これらのキーワードは symbolic キーワードと等価です。

list キーワードを使用すると、シンボルがエクスポート・シンボルとしてマークされていなくても、出力ファイルのローダー・セクションにシンボルをリストできます。実行時、アプリケーションにいくつかのシンボルを処理させたい場合、このキーワードを使用できます。 システム・ローダーや実行時リンカーは、リストされたシンボルは処理しません。

symbolicnosymbolic、または nosymbolic- キーワードを使用して、エクスポートされるシンボルに属性を関連付けることができます。 エクスポート・ファイル内のシンボル・アドレスは無視されます。エクスポート・ファイルでは、キーワード cm および bssnosymbolic キーワードと等価です。シンボルの可視性は、internalhiddenprotected、または export キーワードで指定できます。詳細については、エクスポートされるシンボルの属性 を参照してください。

weak キーワードは、弱いシンボル割り当てを指定することができ、 別の属性と共に使用されます。

required キーワードを使用して、シンボルが定義済みでインポートされていないことを確認してください。これらの基準を満たさないシンボルについてエラーが表示されます。

ld コマンドはインポート・ファイルおよびエクスポート・ファイルを次のように処理します。

  • ブランク行は無視されます。
  • * (アスタリスク) で始まる行はコメントであるため、無視されます。
  • # (番号記号、ブランク・スペース) で始まる行は、オペランドを setopt バインダー・サブコマンド (-bdbg:Option) に提供します。例えば、バインダーは # verbose が含まれている行を、ファイルから各シンボルが読み取られるたびにリストします。 このオプションの設定はファイルを処理している間だけ有効です。 # 32、# 64、# no32、および # no64 の各オプションを使用して、リストされるシンボルを 32 ビット・リンク、64 ビット・リンク、またはその両方のリンクのどれに対して使用するかを指定します。

    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 (imember) である場合、 ローダー・セクションに入れられたファイル名は、インポート・ファイル名と インポート・ファイルの #! 行の内容に基づいて、次のように判別されます。
    項目 説明
    #! ( #! の後に何もない場合) ヌル・パス、ヌル・ファイル、ヌル番号を使います。 これはシステム・ローダーによって遅らされたインポートとして扱われます。
    #! () ipathifileimember を使います。 この行は、インポート・ファイルをコマンド・ラインで InputFile パラメーターとして指定している場合に使用できます。 この場合、ファイルは #! で始まらなければなりません。 また、この行は、他の #! 行によって変更されている場合に、デフォルトの名前を復元するために使用することもできます。
    #! path/file (member) 指定されたパス、指定されたファイル、指定されたメンバーを使います。
    #! path/file 指定されたパス、指定されたファイル、およびヌル・メンバーを使います。
    #! file ヌル・パス、指定されたファイル、およびヌル・メンバーを使います。 実行時にはディレクトリーのリストを検索して共用オブジェクトを見つけます。
    #! (member) ipathifile、および指定されたメンバーを使います。 実行時にはディレクトリーのリストを検索して共用オブジェクトを見つけます。
    #! file (member) ヌル・パス、指定されたファイル、指定されたメンバーを使います。 実行時にはディレクトリーのリストを検索して共用オブジェクトを見つけます。
    #! . (1 つのドット) この名前は、メインの実行可能ファイルの名前です。 別の名前を持つ複数のメインプログラムからシンボルをインポートする共有オブジェクトを作成する場合、このファイル名を使用します。 メインプログラムは、他のモジュールがインポートするシンボルをエクスポートする必要があります。 エクスポートしないとロードに失敗します。 実行時リンカーで、あるいは実行時リンカーなしで、このインポート・ファイル名を使用できます。
    #! .. (2 つのドット) この名前を使用して、実行時リンカーが解決するシンボルをリストします。 このファイル名を使用して、実行時リンカーを利用するプログラムが使用する共有オブジェクトを作成します。 rtllib オプションでリンクされなかったプログラム内の .. からシンボルをインポートするモジュールを使用すると、シンボルは解決されず、このようなシンボルへの参照は未定義の動作をします。

-brtl オプションを使用する場合にアーカイブ・メンバーを自動的にロードするため、次のようにしてインポート・ファイルを作成できます。 shr.so がアーカイブ内の共有オブジェクトである場合、次のようにしてインポート・ファイルを作成します。

# autoload
#! (shr.so)

適用できる場合、追加行に追加のメンバー名をリストできます。 インポート・ファイルにシンボル名をリストする必要はありません。shr.so からインポートされるシンボルは、shr.so 自体から読み取られるからです。

共用ライブラリーの作成についての詳細は、 プログラミングの一般概念: プログラムの作成およびデバッグの『共用ライブラリーの作成方法』を参照してください。 ロードとバインドについての詳細は、 Technical Reference: Base Operating System and Extensions, Volume 1load subroutine』を参照してください。

エクスポートされるシンボルの属性

実行時リンクを使用すると、正しい属性でシンボルがエクスポートされる場合に限って、同じモジュール内のシンボルへの参照を再バインドできます。 symbolic 属性のシンボルへの参照は再バインドできません。 nosymbolic 属性のシンボルへの参照は、再バインドできます。 シンボルが変数である場合、nosymbolic- 属性のシンボルへの参照は再バインドできます。 関数シンボルの場合、関数ポインターを使用する呼び出しは再バインドできます。その一方で、直接の関数呼び出しは再バインドできません。 nosymbolic- 属性がデフォルトです。この属性は、オペレーティング・システムのこれまでのバージョンとの互換性のために提供されますが、お勧めできません。

実行時リンカーを使用しない場合、nosymbolic 属性を使用しないでください。 モジュール内の関数呼び出しは、グローバルなリンケージ・コードを使用する関数ディスクリプターを 通じて間接的に実行されるからです。 それ以外の場合、エクスポートされるシンボルの属性は、実行時リンカーを使用しないプログラムで使用するモジュールには影響しません。

エクスポート・ファイルにリストされるシンボルに、明示的なエクスポート属性を指定できます。 明示的な属性のない多くのシンボルは、symbolic オプション、nosymbolic オプション、または nosymbolic- オプションで指定したデフォルトのエクスポート属性でエクスポートされます。

シンボルがエクスポート・ファイルでキーワードなしでリストされ、シンボルの可視性が入力ファイルで指定されている場合、シンボルの可視性が保持されます。入力シンボルの可視性は、internalhiddenprotected、または export キーワードを使用してオーバーライドできます。

weak エクスポート属性は、Loader Section で、関連したシンボルの マッピング・タイプに L_WEAK とマークします。

インポートされるシンボルは、 weak エクスポート属性のみを保有することができます。別のモジュールからシンボルをインポートすると、シンボルへのすべての参照を再バインドできます。 しかし、シンボルが固定アドレスでインポートされた場合、すべての参照はこの固定アドレスにバインドされ、実行時リンカーでは再バインドできません。 システム・ローダーは、延期されたインポートを解決しなければなりません。 実行時リンカーが、延期されたインポートへの参照を解決したり、再バインドしたりすることはありません。

非インポートのシンボルをエクスポートする場合、次の規則を使用します。

  • シンボルに list 属性がある場合、ローダー・セクションのシンボル・テーブルにリストされます。しかし、シンボル・テーブル・エントリーに L_EXPORT フラグは設定されません。実行時リンカーは、このようなシンボルを無視します。
  • 明示的な属性で、または明示的な可視性でシンボルがエクスポートされた場合、明示的な属性または可視性が使用されます。
  • シンボルが BSS シンボルである場合、nosymbolic 属性でエクスポートされます。
  • それ以外のシンボルの場合、symbolic オプション、nosymbolic オプション、または nosymbolic- オプションで指定したグローバル属性でシンボルがエクスポートされます。デフォルトのグローバル属性は nosymbolic- です。

アドレス・マップ

ld コマンドはアドレス・マップを生成して、出力オブジェクト・ファイル内のシンボルのレイアウトをリストします。 map (または R) オプションを使用すると、未解決のシンボルとインポートされたシンボルが最初にリストされ、次に各セクションのシンボルがアドレス順にリストされます。 calls (または C) オプションを使用すると、各シンボルの後に、そのシンボルから他のシンボルへの参照がリストされます。 xref (または X) オプションを使用すると、各シンボルの後に、他のシンボルからそのシンボルへの参照がリストされます。 smapscalls、または sxref オプションを使用すると、シンボルがアルファベット順にリストされることを除き、アドレス・マップには、順に mapcallsxref オプションによってリストされるものと同じ情報が格納されます。

内部シンボルは、ストレージ・クラス HIDEXT と共に、シンボル名の前後に文字 < および > (不等号括弧) が付いた形式で出力されます。ストレージ・クラス C_EXT の外部シンボル名はシンボル名の前後に不等号括弧が付いていない形式で、 ストレージ・クラス C_WEAKEXT の外部シンボル名はシンボル名の前後に 文字 { および } が付いた形式で出力されます。

各シンボルについて、次の情報がリストされます。

  • シンボルがインポートされたか、エクスポートされたか、またはエントリー・ポイントかを示す情報。* (アスタリスク) はエントリー・ポイントを、I はインポートされたシンボルを、E はエクスポートされたシンボルを示します。
  • そのアドレス (インポートされたシンボルを除く)
  • 長さと位置合わせ (CSECT シンボル、BSS シンボルの場合)
  • ストレージ・マッピング・クラス
  • シンボル・タイプ
  • シンボル番号 (同じ名前のシンボルを区別するために使用)
  • シンボル名
  • 入力ファイル情報

ストレージ・マッピング・クラスとシンボル・タイプは、/usr/include/syms.h ファイル内で定義されます。 アドレス・マップには、最後の 2 桁のみ表示されますが、ストレージ・マッピング・クラス XMC_TC0T0 として表示されます。

入力ファイル情報は、入力ファイルのタイプに応じて異なります。 オブジェクト・ファイルの場合は、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 ビット・モードが使用されます。

  1. 数個のオブジェクト・ファイルをリンクして a.out ファイルを作成し、オペレーティング・システムの下で実行するには、次のように入力します。
    ld /usr/lib/crt0.o pgm.o subs1.o subs2.o -lc
    -lc (L の小文字) は、libc.a ライブラリーをリンクします。 これより簡単なリンク方法は、次のように cc コマンド (コンパイラー) を使用してファイルをリンクすることです。
    cc  pgm.o  subs1.o  subs2.o
  2. 出力ファイルの名前を指定するには、次のように入力します。
    cc  -o pgm  pgm.o  subs1.o  subs2.o
    これによりファイル pgm 内に出力が作成されます。
  3. オブジェクト・ファイル subs1.o だけが変更されている場合に pgm を再リンクするには、次のように入力します。
    cc -o pgm subs1.o pgm
    オブジェクト・ファイル pgm.osubs2.o から取り出された CSECT は、ファイル pgm から読み取られます。 この手法は、プログラムが多くの入力ファイルから構成されており、一度に変更するファイルが少ない場合に、リンク処理を迅速に行うことができます。
  4. ライブラリー・サブルーチンとリンクするには、次のように入力します。
    cc  pgm.o  subs1.o  subs2.o  mylib.a  -ltools
    これにより、オブジェクト・モジュール pgm.osubs1.osubs2.omylib.a アーカイブからのサブルーチン、および -l (L の小文字) フラグで指定されたライブラリー (これは /usr/lib/libtools.a ファイルを意味します) からのサブルーチンがリンクします。
  5. 共用オブジェクト・ファイルを生成するには、次のように入力します。
    ld -o shrsub.o subs1.o subs2.o -bE:shrsub.exp -bM:SRE -lc
    これは、オブジェクト・ファイル subs1.osubs2.o と、-lc フラグで指定したライブラリー libc.a からのサブルーチンをリンクします。 これは、ファイル shrsub.exp で指定されたシンボルをエクスポートし、リンクされた共用オブジェクトをファイル shrsub.o. に保管します。-bM:SRE は、リンクされているオブジェクト・ファイルに共用オブジェクト・フラグをセットします。
  6. 上記で生成された共用オブジェクト・ファイル shrsub.o とリンクするには、次のように入力します。
    cc -o pgm pgm.o shrsub.o -L '.'
    これは、オブジェクト・ファイル pgm.o を、shrsub.o のエクスポートされたシンボルとリンクします。リンクされた出力は、オブジェクト・ファイル pgm に保管されます。 -L '.' は、システム・ローダーが共用オブジェクト shrsub.o を見つけるために使用するライブラリー検索パスに、現行ディレクトリーを追加します。 実行時には、ディレクトリーに shrsub.o ファイルのインスタンスがあるか、/usr/lib 標準ライブラリー・ディレクトリーに shrsub.o ファイルがある場合にのみ、このプログラムがロードされます。 このプログラムをどこからでも実行できるようにするには、オプション -L`pwd` を使用します。

    システム・ローダーによって検索されるディレクトリーのリストは、dump コマンドを使用して表示できます。

  7. 非共用ライブラリーとして libc.a ライブラリーを使用するプログラムをリンクするには、次のように入力します。
    cc -o pgm pgm.o -bnso -bI:/lib/syscalls.exp
    これは、pgm.o を必要なサポート・ライブラリーにリンクして、その結果生成される出力ファイルを pgm と命名します。 cc コマンドの場合、libc.a ライブラリーが必要なサポート・ライブラリーです。通常このライブラリーが、ユーザーのプログラムに共有ライブラリーとしてリンク・エディットされます。 この例では、-bnso オプションで ld コマンドに非共用ライブラリーとして libc.a ライブラリーをリンクするよう指示しています。また -bI:/lib/syscalls.exp は、ld コマンドにカーネルまたは /usr/lib/boot/unix ファイルに実際に含まれるシステム・コール関数をインポートするよう指示します。 -bnso オプションでリンクする場合、この例で -bI:/lib/syscalls.exp オプションによって行われたように、共有オブジェクト内でインポートとエクスポートの両方 (つまりパススルー) が行われたすべてのシンボルを、常に明示的にインポートしなければなりません。
    注: /usr/lib/libc.a が非共用リンクされる場合は、 フラグ -bI:/lib/syscalls.exp を使用しなければなりません。 オペレーティング・システムの更新リリースがインストールされると、常にアプリケーションを再リンクする必要があります。 静的にリンクされたアプリケーションは、修正レベルまたはリリース・レベルから他の修正または リリース・レベルにバイナリーで移植されません

ファイル

項目 説明
/usr/bin/ld ld コマンドが入っています。
/usr/lib/lib*.a リンク・プログラムで使用するライブラリーを指定します。
a.out デフォルトの出力ファイル名を指定します。