本文に進む 日本−日本語
日本HPホーム 製品とサービス お客様サポート/ ダウンロード ソリューション ご購入の方法
≫ お問い合わせ
詳細検索オプション
日本HPホーム
HP-UX リファレンス: セクション 1 : ユーザーコマンド (A~M) > l

ld_ia(1)

Itanium(R) ベース システム用
HP-UX 11i Version 2: September 2004
≫ 

テクニカル ドキュメント

PDF版
フィードバック
ここから本文が始まります

 ≫ 目次

 ≫ 索引

名称

ld_ia: ld ― リンクエディター

構文

リンクエディター

ld [-bdmnqrstvxzEGINOPQSTVZ] [-a search] [-c filename] [-dynamic]
[-e epsym] [-h symbol]... [-k filename] [-l\c x | file] ...
[-l: library] [-m] [-noshared] [-noshared_dynamic] [-o outfile]
[-symbolic] [-u symbol]... [-y symbol]... [-A name]
[-B bind]... [-C n] [-D offset] [-Fl] [-Fw] [-Fz] [-G] [-L dir]...
[-N] [-O] [-Pd] [-PD file] [-PF file] [-Q] [-R offset] [-S] [-T] [+[no]allowunsats]
[+as mode] [+b path_list] [+cdp oldpath:newpath] [+cg path] [+compat]
[+copyobjdebug] [+[no]defaultrpath] [+df file]
[+dumpextern filename] [+dpv] [+e symbol]... [+ee symbol]...
[+fb] [+fbu] [+filter shared_library_path]
[+fini function]... [+[no]forceload]
[+gstbuckets size] [+gst] [+gstsize size] [+h internal_name]
[+help] [+hideallsymbols] [+ild] [+ildnowarn] [+ildpad percentage]
[+ildrelink] [+init function]... [+instrumenter filename]
[+interp filename] [+k] [+mergeseg] [+n] [+nocopyobjdebug]
[+nodynhash] [+nodefaultmap] [+noenvvar]
[+noobjdebug] [+nosectionmerge] [+nosmartbind] [+nosrcpos]
[+objdebugonly] [+origin shared_library_name] [+paddata pagesize]
[+padtext pagesize] [+pd size] [+pdzero] [+pgm name] [+pi size]
[+plabel_cache flag] [+profilebucketsize 16|32] [+rpathfirst]
[+s] [+std] [+stripunwind] [+tools] [+v[no]shlibunsats]
[+vallcompatwarnings] [+v[no]compatwarnings]
[+vtype type] [+FP flag] [+I symbol]... [+O[no]fastaccess]
[+O[no]procelim] [ +Oreusedir=dir ] [+Oselectivepercent n]
[+Oselectivesize size] [+OselectiveO3] [+Ostaticprediction]
[+allowdups] [+interposer] [+[no]lazyload]

説明

ld は、入力として単一または複数のオブジェクトファイル、またはライブラリをとり、 それらを結合して単一の (通常実行可能な) ファイルを生成します。 これを行う際に、外部シンボルへの参照の解決、 最後のアドレスのプロシージャや変数への割当て、 新しいアドレスを反映するためのコードおよびデータの修正 (「再配置」というプロセス)、 およびシンボリックデバッグ情報がファイルに存在するときには、そのアップデートを行います。 デフォルトでは、 ld は HP-UX のローダー exec() (exec(2) を参照) によって実行できる実行可能ファイルを生成します。 また、このリンカーは、 ld によるこれ以降の処理に適した再配置可能なファイルを生成できます (以下の -r を参照)。 また、 共有ライブラリも生成できます (以下の -b を参照)。 シンボルが重複している場合、または未解決の外部参照が残る場合には、 リンカーは出力ファイルを実行不能としてマークします。 ld は、動作中に他の何らかのエラーが発生した場合、出力ファイルを生成しないこともあります (+k オプションを参照)。

ld は 3 種類の入力ファイル、つまりコンパイラ、アセンブラ、またはリンカーによって作成されるオブジェクトファイル (.o ファイル)、リンカーによって作成される 共有ライブラリ、 およびオブジェクトファイルのアーカイブ (アーカイブライブラリという) を認識します。 アーカイブライブラリには、その構成要素オブジェクトファイルのシンボルのうち外部に見せるシンボルすべてのテーブルがあります。 (アーカイバコマンド ar(1) は、このインデックスを作成、保守します。) ld は、このテーブルを使用して外部シンボルへの参照を解決します。

ld は、コマンド行に記述された順にファイルを処理します。 アーカイブライブラリ内のコードやデータは、ユーザープログラム内の現在未解決の参照を解決する場合に限り、ユーザープログラムに取り込まれます (+[no]forceload を参照)。 コマンド行では、すべての単純なオブジェクトファイルの名前の後にライブラリをリストするのが一般的です。

共有ライブラリのコードおよびデータは、実行可能プログラムには決してコピーされません。 32 ビットモードでは、 crt0.o/usr/ccs/lib/hpux32/crt0.o にあります。 64 ビットモードでは、 crt0.o/usr/ccs/lib/hpux64/crt0.o にあります。 -noshared リンクでは、 crt0.o を含める必要があります。 32 ビットモードでは、ダイナミックローダーは /usr/lib/hpux32/dld.so にあります。 64 ビットモードでは、ダイナミックローダーは /usr/lib/hpux64/dld.so にあります。 ダイナミックローダーは、必要な各ライブラリをプロセスにアタッチし、 プログラムとそのライブラリの間のシンボリック参照をすべて解決します。

共有ライブラリのテキストセグメントは、ライブラリを使用するすべてのプロセスの間で共有されます。ライブラリを使用する各プロセスは、それらのプロセス専用のデータセグメントのコピーを受け取ります。 ライブラリをロードする実行可能プログラム上で pxdb -s on が実行されている場合、共有ライブラリのテキストセグメントは、実行可能プログラムを実行している各プロセスに対してプライベートにマッピングされます。 ld は、ld で作成されたプログラムが使用する共有ライブラリの依存関係を 再帰的に調べます。ld を実行したときに、共有ライブラリの依存関係リストに記録されている パスに存在する、サポートされている共有ライブラリが見つからない場合、 および共有ライブラリが作成されたときに -l 引き数が使用された結果存在する依存関係が見つかった場合には、ld は、ライブラリを検索するように指定されたすべてのディレクトリ (-L および LPATH を参照) を探して、-l で指定されたライブラリを見つけます。

オプション

-a search 

-l オプションで共有ライブラリとアーカイブライブラリのどちらを検索するかを指定します。 search の値は、 archivesharedarchive_sharedshared_archive、 または default のどれかでなければなりません。 このオプションは、ライブラリごとの検索を制御するために、 -l オプションと混在させて複数回指定することができます。 デフォルトでは、ライブラリの共用バージョンが利用できれば使用し、利用できなければアーカイブバージョンを使用します。

archive または shared のどちらかがアクティブならば、指定したライブラリタイプだけが受け付けられます。

archive_shared がアクティブな場合、アーカイブ形式が優先しますが、共有形式も認められます。

shared_archive がアクティブな場合、共有形式が優先しますが、アーカイブ形式も認められます。

静的にバインドされたプログラムを作成するには、 -a archive ではなく、 -noshared オプションを使います。

-b 

通常の実行可能ファイルではなく共有ライブラリを作成します。 このオプションで処理されるオブジェクトファイルは、コンパイラがデフォルトで生成する position-independent code (PIC) でなければなりません。 cc(1)aCC(1)f90(1)as(1)、 および 『『HP-UX リンカー & ライブラリー オンライン ユーザーズガイド』』 で PIC (position-independent code) の説明を参照してください。

-c filename 

ld のオプションをファイルから読み込みます。 各行には、空白で区切った引き数が 0 個以上あります。 ファイル内の各行は、最後の行も含めて、改行文字で終わっていなければなりません。 # 文字は、そこから行末までコメントであることを示します。 # 文字をエスケープさせるには、シーケンス ## を使用します。

-d 

強制的に「共通」シンボルの定義を行います。 つまり、 -r 出力に対してアドレスとサイズを割り当てます。

-dynamic 

このオプションは、デフォルトです。 このオプションにより、リンカーは共有ライブラリを使用できる、ダイナミックリンクされた実行可能プログラムを作成します。 このオプションは、 -noshared の反対です。

共有ライブラリがリンクされていない場合、リンカーはダイナミックリンクされた実行可能プログラムを構築します。 ただし、 +compat オプションを使う PA32 ビットモードでは、共有ライブラリがリンクされていない場合、リンカーは静的にバインドされた実行可能プログラム (アーカイブバインドされた実行可能プログラム) を構築します。

ダイナミックリンクされた実行可能プログラムでは、プログラムが共有ライブラリにリンクされているかどうかにかかわらず、ダイナミックローダーが実行可能プログラムのロード処理を行います。 -noshared (静的にバインドされた) プログラムの場合、制御はダイナミックローダーには渡されません。 詳細については、 dld.so(5) を参照してください。

-e epsym 

出力ファイルのデフォルトのエントリーポイント アドレスを、シンボル epsym のエントリーポイント アドレスに設定します (このオプションは実行可能ファイルだけに適用されます)。

-h symbol 

シンボルテーブルを出力ファイルに書き出す前に、 この名前を「ローカル」としてマークして、外部的に見えなくなるようにします。 これにより、 ld による将来の処理時に、特にこのエントリーが別のファイルの定義と衝突しないようになります。 共有ライブラリまたはプログラムの構築時にこのオプションを使用すると、 指定したシンボルがダイナミックローダーから見えなくなります。

複数のオプションシンボルペアをコマンド行で使って、 symbol を複数指定することができます。 つまり、指定する各 symbol の前に、 -h オプションを付加しなければなりません。

-k filename 

出力ファイルのメモリーマップを記述したマップファイルを指定します。

詳細については 『『HP-UX リンカー & ライブラリー ユーザーズガイド』』 を参照してください。 +nodefaultmap も参照してください。

-lx 

ライブラリ libx.a\clibx.so\c 、または libx.sl を検索します。ここで、 x は単一または複数の文字です。 -a オプションの現在の状態によって、ライブラリのアーカイブ (.a) と共用 (.sl または .so) バージョンのどちらが検索されるかが決まります。 名前が現れた時点でライブラリが検索されるため、 -l の位置は意味があります。 デフォルトでは、32 ビットライブラリは /usr/lib/hpux32 にあります。 64 ビットライブラリは /usr/lib/hpux64 にあります。 環境変数 LPATH がユーザーの環境に存在する場合、 検索するディレクトリをコロンで区切ったリストが設定されていなければなりません。 これらのディレクトリは、デフォルトディレクトリの代わりに検索されますが、その場合でも -L オプションは有効です。 プログラムが共有ライブラリを使用する場合、32 ビット用ダイナミックローダー /usr/lib/hpux32/dld.so または 64 ビット用ダイナミックローダー /usr/lib/hpux64/dld.so は、リンク時に各ライブラリと同じディレクトリから各ライブラリをロードしようとします (+s および +b オプションを参照)。

-l: library 

指定したライブラリを検索します。-l オプションと類似していますが、-a オプションの現在の状態に依存しない点が異なります。 ライブラリ名には、有効なファイル名であれば任意の名前を指定できます。

-m 

標準出力上にロードマップを生成します。

-n  

このオプションは無視されます。

-noshared 

リンカーに、完全にアーカイブバインドのプログラム (静的にバインドされた実行可能プログラムともいう) を強制的に作成させます。 このオプションを使うときは、ld のコマンド行で /usr/ccs/lib/hpux32/crt0.o または /usr/ccs/lib/hpux64/crt0.o (または同等の起動コード) を指定します。 このオプションは、 -dynamic の反対です。

ダイナミックリンクされた実行可能プログラムでは、プログラムが共有ライブラリにリンクされているかどうかにかかわらず、ダイナミックローダーが実行可能プログラムのロード処理を行います。 静的にリンクされたプログラムの場合、制御はダイナミックローダーには渡されません。

-noshared_dynamic
  

共有ライブラリがリンクされている場合、ダイナミックリンクされたプログラムを作成します。 共有ライブラリがリンクされていない場合、リンカーは完全にアーカイブバインドのプログラムを作成します。 このオプションは、互換モード (+compat) オプションではデフォルトです。 -dynamic オプションと -noshared オプションも参照してください。

-o outfile 

outfile (-o outfile を指定しなければ a.out) という名前の出力オブジェクトファイルを生成します。

-q 

このオプションは無視されます。

-r 

次の再リンクのために、出力ファイルに再配置情報を保持します。 ld コマンドは未定義シンボルをレポートしません。 このオプションは、共有ライブラリの作成時 (-b) または -s-x、 または +ild 増分リンクオプションと一緒には使用できません。

-s 

出力ファイルからすべてのシンボルテーブル、再配置、およびデバッグサポート情報を削除します (この情報は strip(1) コマンドでも削除できます)。 このオプションは、 -r オプションおよび +ild オプションと同時に指定することはできません。

注記: -s オプションを使うと、生成されたプログラムに対してシンボリックデバッガが使えなくなります。

-symbolic symbol 

共有ライブラリを構築するときに、指定したシンボルへのすべての参照を、リンカーがライブラリ内に定義されているシンボルで解決するように指示します。 このオプションは -B symbolic と似ていますが、シンボルごとに指示することができます。

複数のオプションシンボルペアをコマンド行で使って、 symbol を複数指定することができます。 つまり、指定する各 symbol の前に、 -symbolic オプションを付加しなければなりません。

-t 

ld が各入力ファイルを処理するたびに、トレースを (標準出力に) プリントします。

-u symbol 

シンボルテーブルの未定義シンボルとして symbol を入力します。 未解決の参照が生成されますが、これは、プログラムをライブラリ内のオブジェクトファイルだけとリンクする場合に便利です。

複数のオプションシンボルペアをコマンド行で使って、 symbol を複数指定することができます。 つまり、指定する各 symbol の前に、 -u オプションを付加しなければなりません。

-v 

リンク時に詳細なメッセージを表示します。 このオプションは、 +vtype all と同等です (詳細については、 +vtype オプションを参照してください)。

-x 

出力ファイルからローカルシンボルを削除します。 これはオブジェクトファイル ユーティリティの機能を損なわずに出力ファイルのサイズを縮小します。このオプションは、-r オプションおよび +ild オプションと同時に指定することはできません。 (増分リンカーは、出力ロードモジュールの -x オプションで削除される部分を必要とします。)

注記: -x オプションを使うと、生成されたプログラムに対してシンボリックデバッガが使えなくなります。

-y symbol 

symbol が現れる各ファイルを示します。 複数のオプションシンボルペアをコマンド行で使って、 symbol を複数指定することができます。 つまり、指定する各 symbol の前に、 -y オプションを付加しなければなりません。

-z 

null ポインターの実行時参照で SIGSEGV シグナルが生成されるようにします (これは -Z オプションの反対です。 -Z がデフォルトです)。

-A name 

このオプションは無視され、警告メッセージが出力されます。

-B bind 

共有ライブラリを使っているプログラムの実行時バインディング動作を選択したり、 共有ライブラリの生成に必要なバインディング方法を選択します。 bind の最も一般的な値は、以下のとおりです。

direct  

シンボルの解決中に解決された共有ライブラリ名を記録することにより、シンボル参照と共有ライブラリの間に直接リンクを作成します。 この情報は、実行時に、ロードされているすべてのライブラリを検索することなく迅速にシンボルを解決する目的で使用されます。

-B direct では、シンボリックバインディングは無条件にオンになり (-B symbolic を参照)、依存共有ライブラリの処理は無効になります。

実行時に直接バインディングを無効にするには、 LD_NODIRECTBIND 環境変数を設定します。

deferred  

プログラム起動時ではなく最初の参照でアドレスをバインドします (デフォルト)。

group  

共有ライブラリをマークして、 dlopen()RTLD_GROUP フラグを指定してロードしたかのように動作させます。これは、依存共有ライブラリには影響しません。

immediate  

ライブラリのロード時に、すべてのシンボルのアドレスを即座にバインドします。 通常、この後に -B nonfatal を指定し、プログラム起動時に解決できないプロシージャ呼び出しを、最初の参照で解決するようにします。

-B nonfatal は、解決できないシンボルに関するメッセージを表示しないので、 それらのメッセージを表示するには -B verbose も指定します。

以下の例を参照してください。

lazydirect  

遅延ローディングにマークされている共有ライブラリへの直接バインド情報のみを記録します。 +[no]lazyload を参照してください。

nodelete  

共有ライブラリをマークして、プロセスから共有ライブラリを切り離さずに dlclose() または shl_load() を使用した明示的なアンロードが暗黙に正常終了を戻すようにします。その後、共有ライブラリハンドルは shl_findsym() に対してのみ有効になります。 dlsym()dlclose() 、および shl_unload() に対しては、 shl_load() または dlopen() を使用して次に明示的にロードするまで無効なままです。

nodirect  

直接バインディングを禁止します。遅延ローディングにマークされたライブラリに対する参照については、1 つの「直接ヒント」のみが記録されます。これはデフォルトの動作です。

nonfatal  

-B immediate も指定した場合、プログラムの起動時にバインドできなかったコードシンボルは、それらが参照されるまでバインドが延期されます。 上記の -B immediate の説明を参照してください。

-B nonfatal は、解決できないシンボルに関するメッセージを表示しないので、それらのメッセージを表示するには -B verbose も指定します。

restricted  

シンボル定義の検索が、ライブラリがロードされた時点での可視シンボルのみに対して行われるようにします。

symbolic  

共有ライブラリを生成するときにのみ使用します。 このオプションは、可能な場合は、ライブラリ内のすべてのシンボルが内部で解決されるようにします。 内部解決されたシンボルも、外部から参照できます。 デフォルト (-B symbolic オプションなし) では、共有ライブラリ内のシンボルへの参照は、最も近接した定義で解決されます。 シンボルをエクスポートする最初のロードモジュール (a.out または共有ライブラリ) が、最も近接した定義を持ちます。 複数のロードモジュールで、同じシンボルを定義しエクスポートすることができます。 共有ライブラリ内のシンボルへの参照は、シンボルが共有ライブラリ内で定義さられていても、他の共有ライブラリ内の定義で解決することができます。 このオプションを使うと、共有ライブラリ内のすべての参照が、共有ライブラリ内に定義されていれば、その定義の使用を強制できます。 -B symbolic と一緒に +e オプションや +ee オプションを使う方法についての詳細は、 +e オプションと +ee オプションを参照してください。

verbose  

シンボルをバインドするときに冗長メッセージを表示します。 -B nonfatal を指定していないときには、これがデフォルトです。 -B nonfatal を指定した場合、冗長メッセージを表示するには、-B verbose を明示的に指定しなければなりません。

バインディングモードの使用法についての詳細は、 +help オプションを使うか、 『『HP-UX リンカー & ライブラリー ユーザーズガイド』』 を参照してください。

-C n 

このオプションは無視され、警告メッセージが出力されます。

-D offset 

データセグメントの開始アドレス (16 進数) を設定します。 このオプションは、カーネルアプリケーションと、埋め込みアプリケーションで便利です。 64 ビットモードのデフォルトアドレスは 0x6000000000000000 で、32 ビットモードのデフォルトアドレスは 0x40000000 です。

-E 

プログラムで定義されているすべてのシンボルを、共有ライブラリにエクスポートするためにマークします。 +compat モードでリンクする場合、 ld はリンクの対象共有ライブラリから実際に参照されているシンボルだけをマークします。 +std モードでリンクする場合は、すべてのシンボルがデフォルトでエクスポートされるので、シンボルが見えるように -E を指定する必要はありません。 しかし、このオプションを指定すると、エクスポートされるシンボルは副作用ですべて必要と見なされるため、 デッドコードを削除 (+Oprocelim) しても削除されません。

-Fl 

アーカイブライブラリのロードを強制します。 +forceload と同じです。

-Fw 

このオプションは無視され、警告が出力されます。

-Fz 

このオプションは指定できますが、無視されます。

-G 

出力ファイルからロード不能データをすべて削除します。 このオプションは通常、デバッグ情報の削除に使用します。 +ild オプションと同時に指定することはできません。

注記: -G オプションを使うと、生成されたプログラムに対してシンボリックデバッガが使えなくなります。

-I  

実行時にプロファイル情報を収集するコードを組み込みます。 計測機能付きのプログラムが実行されると、プロファイルデータベースファイルが出力されます (デフォルトの名前は、flow.data)。 プログラムの実行時に収集されるプロファイルデータは、 -P オプションと一緒に使用できます。 デフォルトの計測機能組み込みプログラムは動的な計測機能組み込みプログラム /opt/langtools/bin/caliper ですが、 +instrumenter オプションを使って、静的な計測機能組み込みプログラム /opt/langtools/bin/sin を呼び出すこともできます。

このオプションは、-P-O+ild、 または +O オプションとともに使用しないでください。

注記: +instrumenter sin を使う場合は、プログラムに計測機能を組み込む方法として、 ld -I オプションではなく、コンパイラの +I オプションを使うようお勧めします。 リンカーを直接起動するときには、リンカーに -u__sin_core__-u__sin_init 、 および -lsin オプションを渡さなければなりません。 ライブラリとリンクする、計測機能付き共有ライブラリと計測機能付き共有実行可能プログラムの両方がある場合は、 -u オプションのほかに、 -h__sin_core__ オプションと -h__sin_lookup_ibt オプションも指定しなければなりません。 デフォルトまたは +instrumenter caliper を使う場合は、これ以外のリンカーオプションは必要ありません。

-L dir 

デフォルトのディレクトリで libx.a libx.sl または libx.so を検索する前に、 dir で検索します。 複数のディレクトリを指定できますが、各ディレクトリの前には -L オプションを付けなければなりません。 -L オプションは、コマンド行の -l オプションの前でのみ有効です。

-N  

32 ビットモードでのみ、データがテキストの直後に置かれるようにし、テキストを書き込み可能にします。 このタイプのファイルは共有できません。

-O  

リンカーの最適化をオンにします。 現在、最適化には、不要なプロシージャの除去が含まれます。

+O4 コンパイラオプションを選択すると、コンパイラによって -O がリンカーに渡されます。

このオプションは、 +ild オプションと併用できません。

リンカーの最適化に関する詳細は、 +help オプションを使うか、 『『HP-UX リンカー & ライブラリー ユーザーズガイド』』 を参照してください。

-P  

計測機能付きプログラム (-I オプションを参照) によって生成されるプロファイルデータベースファイルを検査して、コードに対してプロファイルベースの最適化を行います。 このオプションは、 +ild オプションと一緒に使用しないでください。

-Pd  

デバッグ可能な関数を並べ換えます。 通常、 -P は、 .o ファイル内のデバッグ情報付きの関数を並べ換えません。 並べ換えるとデバッグできなくなるためです。 このオプションはそれよりも優先され、関数を並べ換えます。 デフォルトでは、並べ換えは、flow.data から作成されたリンクオーダーファイルを基に実行されます。 -Pd オプションを指定すると、リンカーは並べ換えに flow.data を使いません。 このオプションは、 +ild オプションと同時に使うことはできません。

注記: -Pd オプションを使うと、生成されたプログラムに対してシンボリックデバッガが使えなくなります。

-PD filename 

-P オプションを用いてリンクした際に fdp が生成したリンクオーダー ファイルをユーザー指定ファイルに保存します。 このオプションは、 +ild オプションと一緒に使用することはできません。

-PF filename 

リンカーに対して、 /usr/ccs/bin/fdp を用いてリンクオーダーファイルを生成せず、指定されたファイルをリンクオーダーファイルとして用いるように指示します。 このオプションは、 +ild オプションと一緒に使用することはできません。

-Q 

このオプションは無視されます。

-R offset 

テキスト (コード) セグメントの開始アドレス (16 進数) を設定します。 このオプションは、カーネルと埋め込みアプリケーションで便利です。 64 ビットモードのデフォルトアドレスは 0x4000000000000000 で、 32 ビットモードのデフォルトアドレスは 0x04000000 です。 -N オプションを指定すると、デフォルトは 0x1000 です。

-S 

このオプションは無視され、警告メッセージが出力されます。

-T 

このオプションは無視されます。

-V  

使用している ld のバージョン情報を示すメッセージが出力されます。

-Z  

このオプションはデフォルトです。 null ポインターの実行時参照を可能にします。 cc(1)-Z およびポインターの説明を参照してください (これは -z オプションの反対です)。

+allowdups 

複数シンボル定義を許可します。デフォルトでは、再配置可能なオブジェクト間で複数シンボル定義を行うと、致命的エラーの状態になります。このオプションでは、エラー状態を抑制し、最初のシンボル定義を使用することができます。

+[no]allowunsats 

未解決シンボルのエラー報告を制御します。 +allowunsats は、出力ファイルに未解決シンボルがある場合でもエラーのフラグをつけません。 これは再配置可能リンクおよび共有ライブラリ生成でのデフォルトです。 +noallowunsats は、出力ファイルに未解決シンボルがある場合はエラーのフラグをつけます。 これはプログラムファイルでのデフォルトです。

+as mode 

カーネルが使用するアドレススペース モデルを制御します。 モデルの値は、 default, share_magic, exec_magic, shmem_magic, mpas のいずれかです。 現在のデフォルトは share_magic です。 デフォルト以外のモデル値に設定するには、 テキストセグメントとデータセグメントが連続領域に配置されるように、 -N コンパイラオプションを付けて実行ファイルを作成する必要があります。

+b path_list 

-l または -l: オプションのいずれかで指定した、 実行可能出力ファイルに必要な共有ライブラリをプログラム実行時に検索するディレクトリをコロンで区切ったリストで指定します。 このディレクトリリストは、埋め込みパスになります。 +b を指定しないか、引き数がコロン (:) だけの場合、 ld-L オプションおよび LPATH 環境変数 (+s オプションを参照) によって指定されるすべてのディレクトリを使って、埋め込みパスを構築します。

+cdp oldpath:newpath
  

このオプションは無視されます。

+compat 

リンカーの互換モードをオンにします。 これは、PA-RISC の 32 ビットリンクを模倣する動作です。

+[no]copyobjdebug
  

+noobjdebug リンカーオプションを使うと、 +objdebug コンパイラオプションの効果が無効になります。 リンカーは、デバッグ情報の出力ファイルへのコピーを省略し、オブジェクトファイルからの +objdebug 情報の取り出しも省略します。 ただし、以前の -r リンクの結果として作成されたオブジェクトファイルがある場合、これらのファイルの +objdebug 情報は取り除かれません。 +nocopyobjdebug オプションを +noobjdebug オプションと一緒に使うと、 -r オプションで生成されたオブジェクトを含め、リンカーは、すべてのオブジェクトファイルから強制的に +objdebug 情報を取り除きます。 デフォルトは、 +copyobjdebug です。

+[no]defaultrpath
  

デフォルトは、 +defaultrpath です。 +b オプションを指定しない限り、 -L で指定したパスが埋め込みパスに含まれます。 +b を使うと、 +b で指定したパスリストだけが埋め込みパスに含まれます。

+nodefaultrpath オプションを使うと、 -L オプションで指定したすべてのライブラリパスが、埋め込みパスから削除されます。 リンカーは、 -L オプションで指定されたライブラリパスを、リンク時に検索します。 実行時に検索されるライブラリパスは、 LD_LIBRARY_PATH 環境変数および SHLIB_PATH 環境変数で指定されているライブラリパス、 +b リンカーオプションで指定されているライブラリパス、デフォルトのライブラリパスだけです。

+df file 

-P オプションと併用すると、このオプションは、file をプロファイルデータベース ファイルとして使用するように指定します。 デフォルト値は flow.data です。 FLOW_DATA 環境変数の説明を参照してください。 このオプションは、 +ild オプションと一緒に指定することはできません。

+dpv 

procelim で除外されたプロシージャの情報を出力します。 +vtype procelim と同じです。

+dumpextern filename
  

実行可能プログラムと共有ライブラリのリンク時に有効です。 リンカーによって filename で指定したファイルに、すべての外部シンボルがダンプされます。 ロードモジュール (a.out または共有ライブラリ) 内で参照され、ロードモジュール内で定義されていないすべての外部シンボルが、指定したファイルにダンプされます。 -Bextern:filename オプションを使うと、このファイルをコンパイラに戻すことができます。 詳細については、コンパイラオプションの -Bextern:filename-Bhidden、 および -Bprotected を参照してください。

+e symbol 

共有ライブラリまたはプログラムを構築する際、 ダイナミックローダーにエクスポートするシンボルをマークします。 明示的にマークしたシンボルだけが エクスポートされます。 共有ライブラリを構築する際、 エクスポートされないシンボルへの呼び出しが内部解決されます。

+e オプションまたは +ee オプションを -B symbolic と一緒に使うと、指定したシンボルへの参照は、定義されている場合、内部解決されます。 実行時の動作は、 +e だけを使った場合と異なることがあります。

複数のオプションシンボルペアをコマンド行で使って、 symbol を複数指定することができます。 つまり、指定する各 symbol の前に、 +e オプションを付加しなければなりません。

+ee symbol 

このオプションは、シンボルをエクスポートする点で +e オプションに似ています。 しかし、 +e オプションとは異なり、 +ee オプションはファイル内の他のどのシンボルの可視性も変更しません。 +compat モードの実行可能プログラムを構築する場合、 ld はデフォルトで、リンク時に見える共有ライブラリが実際に参照しているシンボルだけをエクスポートします。 +ee オプションと +compat オプションを一緒に指定すると、デフォルトでエクスポートされているシンボルを隠すことなく、指定したシンボルがエクスポートされます。 +std モードのリンクでは、全シンボルがデフォルトでエクスポートされるので、シンボルを可視にするために +ee は必要ありません。 しかし、シンボルの必要性を判断する際に別の副作用があり、 デッドコード削除 (+Oprocelim) を使用してもデッドコードが除去されません。 +ee オプションは、 +hideallsymbols のようなオプションが同時に指定されたときも、エクスポートの動作は変わりません。

複数のオプションシンボルペアをコマンド行で使って、 symbol を複数指定することができます。 つまり、指定する各 symbol の前に、 +ee オプションを付加しなければなりません。

+fb 

リンカーで生成された実行可能ファイルに対して fastbind ツールを実行するように、 リンカーに指示します。 実行可能ファイルは共有ライブラリとリンクされます。 fastbind(1) についての詳細は、 +help オプションを使うか、 『『HP-UX リンカー & ライブラリー ユーザーズガイド』』 を参照してください。 このオプションは、 +ild オプションと一緒に指定することはできません。

+fbu 

fastbind ツールに -u オプションを渡します。 fastbind(1) についての詳細は、 +help オプションを使うか、 『『HP-UX リンカー & ライブラリー ユーザーズガイド』』 を参照してください。 このオプションは、 +ild オプションと一緒に指定することはできません。

+filter shared_library_path
  

共有ライブラリのフィルター機能を有効にします。 この機能を使えば、大規模なライブラリを 1 つの「フィルター」といくつかの「処理系」ライブラリに分割できるので、共有ライブラリを効率的に構成できます。 shared_library_path には、フィルターライブラリの場所を指定します。 詳細は、 『『HP-UX リンカー & ライブラリー オンライン ユーザーズガイド』』 を参照してください。

+fini function_name
  

ターミネータ関数を指定します。 コマンド行上では、起動される順に左から右へ指定します。

複数のオプションシンボルペアをコマンド行で使って、ターミネータ関数を複数指定することができます。 つまり、指定する各関数の前に、 +fini オプションを付加しなければなりません。

+[no]forceload 

デフォルトは、 +noforceload です。 +forceload オプションは、アーカイブライブラリからすべてのオブジェクトファイルをロードします。 +noforceload は、アーカイブライブラリから必要なオブジェクトファイルだけをロードします。 モードは明示的に、あるいはデフォルトで選択でき、変更されるまでそのモードのままです。

+gst  

シンボルのインポート/エクスポートエントリーの値を検索するために使用する、グローバルシンボル テーブルのハッシュメカニズムを有効にします。 +gst と、これに関連するオプションを使用すると、 エクスポートされたシンボルの検索を高速化するグローバルシンボル テーブルが利用され、性能が向上します。 詳細は dld.so(5) と 『『HP-UX リンカー & ライブラリー オンライン ユーザーズガイド』』 を参照してください。

+gstbuckets size 

このオプションは無視されます。

+gstsize size 

グローバルシンボル テーブルのハッシュメカニズムに使用するハッシュ配列のサイズを指定します。 デフォルト値は 1103 です。 この値は、実行時に _HP_DLDOPTS 環境変数へ値 -symtab_size prime number を設定することで変更できます。 この値は、 chatr +gstsize size file を用いて設定できます。

+h internal_name 

共有ライブラリを作成する際に、internal_name をライブラリ名として記録します。 ライブラリが別の実行可能ファイル (プログラムまたは共有ライブラリ) をリンクするために使用される場合、 入力共有ライブラリのパス名の代りに、この internal_name が出力ファイルのライブラリリストに記録されます。 つまり、 +h を使用しない場合、共有ライブラリには内部名がないため、その共有ライブラリを使って実行可能ファイルを構築すると、リンカーは自分が参照しているライブラリ名を記録します。

+h オプションがリンク行に複数指定されている場合、リンカーは最初のオプションを使い、警告メッセージを表示します。

+help  

HP-UX オペレーティングシステムに付属のヘルプブラウザ ユーティリティ 『『HP-UX リンカー & ライブラリー オンライン ユーザーズガイド』』 を表示します。 詳細は、 『『HP-UX リンカー & ライブラリー ユーザーズガイド』』 を参照してください。

+hideallsymbols 

+e で明示的にエクスポートしない限り、すべてのシンボルのエクスポートを禁止します。 このオプションを使うと、すべてのシンボルがシンボルテーブル内で「ローカル」とマークされます。 -h オプションと +e オプションも参照してください。

+ild 

増分リンクを指定します。

出力ファイルが存在しないか、出力ファイルが +ild オプションなしで作成されている場合、リンカーは初期増分リンクを実行します。 作成された出力ファイルは、以降の増分リンクで使用できます。 増分リンクオプションは、実行可能プログラムと共有ライブラリのどちらのリンクにも有効です。

次のオプションは、 +ild オプションと同時に使うことはできません。 +ild と同時に使用できない次の ld オプションのいずれかを指定すると、リンカーは警告メッセージを出力し、 +ild オプションを無視します。

-r 

再配置可能オブジェクトファイルを作成します。

ストリップオプション: 

-s-x、 および -G は、出力ファイルをストリップします。

最適化オプション: 

-I-O-P-PD-PF+df file+fb+fbu+fbs+pgm name+Oprocelim

次のオプションは +ild オプションと併用できますが、制限事項があります。

-D offset -R offset
  

データセグメントおよびテキストセグメントのオリジンを設定します。 初期増分リンク後にオフセットを変更すると、リンカーは初期増分リンクを自動的に実行します。

-k mapfile 

デフォルト以外のマップファイルを指定します。 +ild オプションと一緒に、ユーザー指定のマップファイル仕様を使用できます。 ただし、初期増分リンク後はマップファイルを変更しないでください。 初期リンク後にマップファイルを変更すると、初期増分リンクが自動的に行われます。

+ildnowarn 

増分リンクに関する警告を抑制します。 デフォルトでは、リンカーは増分リンクに関連する警告をすべて出力します。 +ild+ildrelink のどちらも指定していない場合、このオプションは無視されます。

+ildpad percentage
  

増分リンカーが割り当てるパディングの量を、パディングされるオブジェクトファイル構造のサイズに対する割合 (percentage) で制御します。 デフォルトでは、リンカーは 20 % 未満のパディングスペースを割り当てます。 +ild+ildrelink のどちらも指定していない場合、このオプションは無視されます。

+ildrelink 

出力ロードモジュールの状態にかかわらず、初期増分リンクを実行します。

状況によっては (たとえば、内部パディングスペースの不足)、増分リンカーは初期増分リンクを強制的に実行することがあります。 +ildrelink オプションを使用して定期的に出力ファイルを再構築することにより、このような予期しない初期増分リンクが発生するのを防ぐことができます。

+init function_name
  

初期化関数を指定します。 コマンド行では、起動の逆順に (右から左へ) この関数を指定します。

複数のオプションシンボルペアをコマンド行で使って、初期化関数を複数指定することができます。 つまり、指定する各初期化関数の前に、 +init オプションを付加しなければなりません。

+instrumenter name
  

使用する計測機能組み込みプログラムを指定します。 指定できるのは、 sin または caliper だけです。 デフォルトは caliper です。 sin を指定すると、リンカーは自動的に /opt/langtools/bin/sin を呼び出します。 caliper を指定すると、プログラム実行時に、動的ローダーが自動的に /opt/langtools/bin/caliper を呼び出します。

+interp filename 

dld のパスを変更して、 filename で指定したプログラムを、ダイナミックローダーの「インタプリタ」プログラムとして使います。 特別なバージョンの dld.so をデバッグする際に便利です。 デフォルトのパスは、32 ビットプログラムの場合は /usr/lib/hpux32/uld.so:/usr/lib/hpux32/dld.so、 64 ビットプログラムの場合は /usr/lib/hpux64/uld.so:/usr/lib/hpux64/dld.so です。

+interposer  

共有ライブラリの構築時にのみ使用します。インタポジションとして使用可能な共有ライブラリを作成します。直接バインド情報 (-B direct を参照) を使用したアプリケーションの参照を解決する場合、ダイナミックローダーはまずインタポジションライブラリを検索します。すべてのインタポジションライブラリに対してシンボルを解決できなかった場合は、直接バインディング情報が使用されます。

+k  

リンク中にエラーがまったく発生しなかったときだけ実行可能ファイルを作成するよう、リンカーに指示します。 (システムエラーや参照未解決) エラーが発生した場合、出力ファイルは削除されます。

+[no]lazyload  

共有ライブラリの遅延ローディングを有効 [無効] にします。 +lazyload ライブラリのロードは、実行中にそのライブラリが参照されるまで遅延されます。 +lazyload+nolazyload オプションの両方を、リンク時のコマンド行で同時に指定しても構いません。 指定されたモード (明示的でもデフォルトでも) は、リンクのコマンド行で、 次にこの 2 つのオプションのいずれかが指定されるまで、 後続のすべてのライブラリに対して有効です。

次の条件を 1 つ以上を満たすライブラリでは、lazy ローディングは無効です。

リンカーは、このようなライブラリを暗黙的に +nolazyload ライブラリに変換します。

+lazyload 共有ライブラリの依存ライブラリは、リンク行上に明示的に指定されていない限り、リンク時には処理されません。

LD_NOLAZYLOAD 環境変数を設定することにより、実行中に遅延ローディングを無効にすることができます。

+mergeseg  

実行可能ファイルにフラグを設定して、そのファイルがダイナミックローダーによって起動されるときにロード対象共有ライブラリのすべてのデータセグメントが 1 ブロックにマージされるようにします。 動的にロードされる各共有ライブラリのデータセグメントは、依存ライブラリのデータセグメントともマージされます。 このようにマージすれば、カーネルで大きなページテーブルエントリーを使うことが可能になり、実行時の性能が向上します。

+n  

リンカーが、アーカイブライブラリや共有ライブラリを検索する前に、オブジェクトモジュールをすべてロードするようにします。 それからリンカーは、コマンド行に指定されたアーカイブライブラリと共有ライブラリを左から右の順に検索します。 コマンド行のライブラリの左から右への検索は、未解決シンボルがなくなるか、 検索で新しい定義が追加されなくなるまで繰り返されます。 このオプションは、互いに依存するシンボルを持った 2 つのライブラリを指定する場合に有効です。

+nodefaultmap 

デフォルトのメモリーマップを使わないようにします。 -k リンカーオプションによってマップファイルを指定する必要があります。

+nodynhash 

+gst オプションでの実行可能プログラムまたは共有ライブラリの .dynhash セクションの作成に関する、デフォルトのリンカー動作を無効にします。 ライブラリまたは実行可能プログラムのグローバルシンボルテーブルを事前に作成しても、検索機能で使用されることがほとんどない場合、または事前にハッシュ値を計算して格納するためのオーバーヘッドが高すぎる場合に、このオプションを使用して、それらの計算済みのハッシュテーブル情報を生成しないようにします。 このオプションは、 -r オプションとともに使用すると効果がなくなります。

+noenvvar 

ダイナミックローダーが実行時にダイナミックパス検索用環境変数 LD_LIBRARY_PATHSHLIB_PATH および $ORIGIN を無視するようにします。 デフォルトまたは +std オプションを指定した場合、ダイナミックローダーはこの環境変数を探します。 つまり、この環境変数が有効になります。 +compat オプションまたは +noenvvar オプションを指定した場合、このオプションが有効になり、ダイナミックローダーが変数を無視します (環境変数が無効になります)。 +compat オプションまたは +std オプションを参照してください。 実行可能プログラムや共有ライブラリ内のこのオプションのステータスは、 chatr コマンドの「shared library dynamic path search (共有ライブラリダイナミックパス検索)」の出力で表示されます。 詳細については、 chatr(1) を参照してください。 このオプションは通常、セキュアプログラムに使用します。

+noobjdebug  

+objdebug コンパイラオプションを無効にし、すべてのデバッグ情報を実行可能ファイルにコピーします。 +objdebug コンパイラオプションを -g オプションとともに使用すると、リンカーは出力ファイルへデバッグ情報をコピーせず、オブジェクトファイル内にデバッグ情報を残します。 リンク時に +noobjdebug オプションを指定すると、リンカーがデバッグ情報を出力ファイルにコピーするようにし、 +objdebug コンパイラオプションの効果を無効にすることができます。 +nocopyobjdebug も参照してください。

+nosectionmerge  

-r オプションとともに使用して、プロシージャが個別に配置されるようにします。 デフォルトでは、プロシージャはすべて単一のセクションにマージされます。

+nosmartbind  

このオプションは無視されます。

+nosrcpos  

IC64 (32 ビットおよび 64 ビット) では、コンパイラオプションの +srcpos がデフォルトです。 -g コンパイラオプションを指定しなくても、 +srcpos はコンパイラがデバッグ情報部を作成するようにします。 デフォルトの +srcpos オプションは、いつでも実行可能プログラムにデバッグ情報部をコピーするため、実行可能プログラムが大きくなります。 +srcpos を使うと、 -g コンパイラオプションを指定しなくても、 cxperfcaliper、 および sin などのツールでプログラムのプロファイリングを行うことができます。

+nosrcpos リンカーオプションを使うと、デフォルトの +srcpos コンパイラオプションが無効になり、リンク時にデバッグ情報が削除されます。 +nosrcpos"-g +objdebug" と一緒に使うこともでき、 +objdebug モードを完全に強制することができます (オブジェクトファイルからデバッグ情報をコピーしません)。

+objdebugonly  

非 objdebug のオブジェクトやアーカイブのデバッグ情報を無視して、 +objdebug モードで実行します。 +objdebug オプションでコンパイルされたファイルだけをデバッグする場合は、 +objdebugonly を使用すると、 +noobjdebug でコンパイルされたファイルのデバッグ情報の処理をリンカーが省略するため、リンク時間を短縮することができます。

+origin shared_library_name -lx
  

(-l オプションの前か、共有ライブラリの名前の前でのみ使います。) リンカーが 共有ライブラリリストの 共有ライブラリ名 の前に $ORIGIN を追加し、出力モジュールに DF_ORIGIN フラグを設定するようにします。 実行時、ダイナミックローダーは親モジュール (オブジェクトモジュール、共有ライブラリ、または実行可能プログラム) の現在のディレクトリを調べ、 $ORIGIN をそのディレクトリ名で置き換えます。 例を次に示します。

$ ld -dynamic main.o +origin libx.so -L /usr/lib/hpux32/ -lc

+origin オプションが利用可能ですが、 +b オプションを使って埋め込みパス内で $ORIGIN を指定する方法をお勧めします。 例を次に示します。

$ ld -dynamic main.o -L /usr/lib/hpux32/ -lc +b \$ORIGIN

$ORIGIN についての詳細は、 +help オプションを使うか、 『『HP-UX リンカー & ライブラリー ユーザーズガイド』』 を参照してください。

+paddata pagesize
  

pagesize の倍数になるように、データセグメントをゼロでパディングします。 これによりページ割り当てが改善されます。つまり、カーネルがより少数の大きいデータページを割り当てることができるようになり、TLB ミスが減ります。 このオプションを使うと、出力ファイルのサイズが大きくなります。

+padtext pagesize
  

pagesize の倍数になるように、テキストセグメントをゼロでパディングします。 これによりページ割り当てが改善されます。つまり、カーネルがより少数の大きいデータページを割り当てることができるようになり、TLB ミスが減ります。 このオプションを使うと、出力ファイルのサイズが大きくなります。

+pd size 

データ用に使用する仮想メモリーのページサイズを指定します。 サポートされているサイズは 4K16K64K256K1M4M16M64M256MDL です。 サイズを D にすると、使用するページのサイズをカーネルが選択します。 サイズを L にすると、できるかぎり大きなページサイズが使用されます。 要求したサイズが受け入れられない場合、実際のページサイズは変わることがあります。

+pdzero 

このオプションは無視されます。

+pgm name 

-P オプションと一緒に使用し、 プロファイルデータベース ファイルにおけるルックアップ名として、name を使用するように指定します。 デフォルトは出力ファイルのベース名です (-o オプションによって指定されます)。 このオプションは、 +ild オプションと一緒に使用することはできません。

+pi size 

命令用に使用する仮想メモリーのページサイズを指定します。 詳細は +pd オプションを参照してください。

+plabel_cache flag
  

このオプションは無視されます。

+profilebucketsize [16|32]
  

プロファイリングサンプルカウンターバケットのサイズを指定します。 指定できる値は、16 または 32 です。 詳細については、 gprof(1) を参照してください。

+s  

このオプションは、デフォルトです。 実行時にダイナミックローダーが環境変数 SHLIB_PATH および LD_LIBRARY_PATH を使用して、ダイナミックライブラリ検索可の実行可能出力ファイルが必要とする共有ライブラリを、検索できることを示します。 ダイナミックライブラリ検索が可能な共有ライブラリは、"/" (スラッシュ) 文字がない内部名 (たとえば、共有ライブラリパス名のベース名) を持つか、内部名がなくて -l-L が指定されたか、共有ライブラリパス名のベース名だけを持ちます。 この環境変数は、ディレクトリをコロンで区切ったリストとして設定する必要があります。

+compat オプションを使う互換モードでは、 +s+b を両方とも使用する場合、コマンド行での相対的な順序で、どのパスリストを最初に検索するかが決まります (+b オプションを参照)。 標準モード (デフォルトモードまたは +std オプションを使った場合のモード) では、 +s+b の順序はダイナミックローダーの検索の順序に影響せず、環境変数は必ず最初に検索されます。

+rpathfirst 

このオプションは、 RPATH (埋め込みパス) で指定されているパスが、 LD_LIBRARY_PATHSHLIB_PATH で指定されているパスよりも前に、共有ライブラリの検索で使われるようにします。 このオプションは、 LD_LIBRARY_PATHSHLIB_PATHRPATH (埋め込みパス) というデフォルトの検索順序を変更します。

+std 

このオプションはデフォルトです。 リンカーの標準モードをオンにします。 このオプションは、 +compat オプションの反対です。 このオプションを指定したときに設定されるオプションは、 -dynamic です。 このオプションを指定したときにオフになるか、無視されるオプションは、 +compat+noenvvar-noshared です。

+stripunwind 

アンワインドテーブルを出力しません。 このオプションにより、実行可能ファイルのサイズが小さくなります。 デバッグや aC++ の例外処理にアンワインドテーブルが不要であれば、このオプションを使ってください。

注記: +stripunwind オプションを使うと、生成されたプログラムに対してシンボリックデバッガが使えなくなることがあります。

+tools 

このオプションは無視されます。

+vallcompatwarnings
  

このオプションは無視されます。

+v[no]compatwarnings
  

このオプションは無視されます。

+v[no]shlibunsats
  

共有ライブラリが使用する未解決シンボルのリストのプリントを有効 [無効] にします。デフォルトは +vnoshlibunsats です。 リンカーから報告される未解決シンボルの中には、シンボルを参照するモジュールが使用されていないため実行時に不要なものもあります。

+vtype type 

リンク動作について冗長な情報を出力します。 type には、次の値を指定します。

all 

+vtype オプションのすべての情報を出力します。 -v と同じです。

files 

ロードされた各オブジェクトファイルの情報を出力します。

heap 

リンクで使用されたヒープのサイズの情報を出力します。

libraries 

検索されたライブラリの情報を出力します。

procelim 

+Oprocelim オプションで削除されたセクションの情報を出力します。

sections 

出力ファイルに追加された各入力セクションの情報を出力します。

symbols 

入力ファイルに定義されていた、または入力ファイルから参照されたグローバルシンボルの情報を出力します。

+FP flags 

プログラム起動時に浮動小数点演算の環境をどのように初期化 するかを指定します。 デフォルトでは、動作はすべて無効にされます。 以下のフラグがサポートされます (大文字のフラグは有効、 小文字のフラグは無効を表します)。

D (d) 

非正規化値の突発的なアンダーフロー (急にゼロになります) を有効にします。

I (i) 

不正確な結果を生成する浮動小数点演算をトラップします。

N (n) 

非正規化 (Denormal|Unnormal) オペランドの浮動小数点演算をトラップします。

O (o) 

浮動小数点オーバーフローをトラップします。

U (u) 

浮動小数点アンダーフローをトラップします。

V (v) 

無効な浮動小数点演算をトラップします。

Z (z) 

ゼロ除算をトラップします。

実行時にこれらの設定値を動的に変更する方法については、 fesettrapenable(3M) を参照してください。

+I function 

共有ライブラリを構築する際に、初期化関数の名前を指定します。 共有ライブラリには、複数のイニシャライザを指定することもできます。 イニシャライザは、コマンド行で指定した順に実行されます。

複数のオプションシンボルペアをコマンド行で使って、初期化関数を複数指定することができます。 つまり、指定する各イニシャライザの前に、 +I オプションを付加しなければなりません。

このオプションは、互換性のためにサポートされています。 +init オプションと +fini オプションの使用をお勧めします。 初期化関数についての詳細は、 +help オプションを使うか、 『『HP-UX リンカー & ライブラリー ユーザーズガイド』』 を参照してください。

+O[no]fastaccess 

このオプションは、無視されます。

+O[no]procelim 

アプリケーションから参照されていないプロシージャの削除を有効 [無効] にします。デフォルトは +Onoprocelim です。 プロシージャの削除は、レベル 0 の場合も含めて、すべての最適化レベルで実行されます。 詳細については、 +help オプションを使うか、 『『HP-UX リンカー & ライブラリー ユーザーズガイド』』 を参照してください。 このオプションは、 +ild オプションと一緒に使用することはできません。

+Oreusedir=dir 

このオプションは無視され、警告メッセージが出力されます。

+Oselectivepercent n
  

インライン化のようなプロシージャ間の最適化を行うために、オブジェクトファイルの先頭から n パーセントの部分をハイレベルオプティマイザに渡すよう、プロシージャ間オプティマイザ ドライバに指示します。 このオプションは、動的プロファイリングがあるときに最適化レベル 4 (+O4) で機能するように設計されています。

+Oselectivesize size
  

このオプションを使うことはできますが、無視されます。

+OselectiveO3 

このオプションを使うことはできますが、無視されます。

+Ostaticprediction
  

このオプションは無視され、警告メッセージが出力されます。

デフォルト

特に指示しない限り、 ld は出力ファイルの名前を a.out とします。 -o オプションはこの名前を置き換えます。 -noshared オプションを指定しない限り、デフォルトではダイナミックリンクプログラムが作成されます。 -a のデフォルトの状態は、共有ライブラリが利用できれば共有ライブラリを検索し、利用できなければアーカイブライブラリを検索することです。 デフォルトのバインド動作は deferred です。

-Z/-z オプションのデフォルト値は -Z です。

+objdebug コンパイラオプション

+objdebug コンパイラオプションを -g オプションと一緒に使うと、 デバッグ情報は出力ファイルにコピーされず、オブジェクトファイルに残されます。 この結果、リンク時間が短くなり、出力ファイルが小さくなります。

+objdebug オプションでコンパイルされたロードモジュールをデバッグするには、HP WDB デバッガがオブジェクトファイルにアクセスできなければなりません。 (-r オプションで構築したオブジェクトファイルの場合、個々のオブジェクトファイルがデバッガから利用できなければなりません。) オブジェクトファイルを移動した場合は、HP WDB の objdir コマンドを使って、オブジェクトファイルの位置を指定する必要があります。

+noobjdebug コンパイラオプションを使うと、デバッグ情報が出力ファイルにコピーされます。 コンパイル時のデフォルトは、 +objdebug です。

リンカーは +objdebug オプションでコンパイルされたオブジェクトファイルを検出すると、デバッグ情報をそれらのファイル内に残します。 +objdebug でコンパイルされていないオブジェクトファイルについては、デバッグ情報が出力ファイルにコピーされます。

リンク時に +noobjdebug オプションを使うと、一部のオブジェクトが +objdebug でコンパイルされていても、デバッグ情報を出力ファイルにコピーすることができます。

増分リンク

リンク時間は、編集、コンパイル、リンク、デバッグの開発サイクルで大きなウエートを占めます。 増分リンカー (+ild オプションと +ildrelink オプションで利用可能) は、以前のバージョンのプログラムの大半は再利用できること、未変更のオブジェクトファイルは処理が不要だということを利用して、リンク時間を短くします。 増分リンカーを使用すると、未変更のオブジェクトファイルを再リンクすることなく、以前に作成した出力ファイル (実行可能ファイルまたは共有ライブラリ) にオブジェクトコードを挿入できます。 初期増分リンク後の再リンクに必要な時間は、変更したモジュールの数に従って変化します。

リンカーには、次のリンクモードがあります。

  • 通常リンク: リンカーがすべてのモジュールをリンクする、デフォルトの動作モード。

  • 初期増分リンク: 増分リンクを要求したときに、増分リンカーが作成した出力モジュールが存在しないか、存在しても増分リンカーが増分アップデートを実行できない場合に開始されるモード。

  • 増分リンク: 増分リンクを要求したときに、増分リンカーが作成した出力モジュールが存在し、増分リンカーが初期増分リンクを必要としない場合に開始されるモード。

一般的に、増分リンクは通常リンクよりもかなり高速です。 初回のリンクの場合、増分リンクは通常のリンク処理と同じ時間を必要としますが、以後の増分リンクは通常リンクよりもかなり高速になります。 中規模のリンク (ファイル数十個、合計数メガバイト) でオブジェクト 1 つの変更では、通常の ld リンクよりも一般的に 10 倍程度速くなります。 増分リンカーは、割り当てられているパディングスペースや他の制約が許す限り、増分リンクを実行します。 リンク時間が短くなる代わりに、実行可能ファイルまたは共有ライブラリのサイズが大きくなります。

増分リンカーは、出力ファイルのすべての構成要素に対してパディングスペースを割り当てます。 パディングによりモジュールは、 ld でリンクされたモジュールよりも大きくなります。 以後の増分リンクでオブジェクトファイルのサイズが大きくなると、増分リンカーは利用可能なパディングを使い尽くしてしまう可能性があります。 このような状態になると、リンカーは警告メッセージを表示し、モジュールの初期増分リンクを完全に行います。

初期増分リンクでは、リンカーは入力のオブジェクトファイルおよびライブラリを、通常リンクと同じ方法で処理します。 通常リンクの処理の他に、増分リンカーはオブジェクトファイル、グローバルシンボル、および再配置についての情報を保存し、出力ファイル内に拡張用のセクションをパディングします。 以後の増分リンクでは、リンカーはタイムスタンプを使用してどのオブジェクトファイルが変更されたかを調べ、そのモジュールをアップデートします。

状況によっては、増分リンカーは増分リンクを実行できません。 このような状態になると、増分リンカーは自動的に初期増分リンクを実行し、増分リンクが可能な状態にします。 以下の状況で、リンカーは自動的に出力ファイルの初期増分リンクを実行します。

  • リンカーのコマンド行が変更された場合。つまり、リンカーのコマンド行が出力ファイルに格納されているコマンド行と異なる場合 (冗長オプションとトレースオプションを除く)。

  • いずれかのパディングスペースを使い尽くした場合。

  • モジュールが、 ld -s オプションまたは ld -x オプションで、またはツール (strip(1) など) で変更された場合。

  • 増分リンカーのバージョンに互換性がない場合。つまり、古いバージョンのリンカーで作成された実行可能ファイルに対して新しいバージョンの増分リンカーを実行した場合。

  • 作業ディレクトリが新しい場合。現在のディレクトリを変更すると、増分リンカーは初期増分リンクを実行します。

  • アーカイブまたは共有ライブラリがリンカーコマンド行に追加されたり、リンカーコマンド行から削除された場合。

  • オブジェクトファイルがリンカーコマンド行から削除された場合。

詳細については、 +help オプションを使うか、 『『HP-UX リンカー & ライブラリー ユーザーズガイド』』 を参照してください。

アーカイブライブラリの処理

未解決のシンボルがある場合、増分リンカーはアーカイブライブラリを検索します。 リンカーは未解決のシンボルに対応するすべてのアーカイブメンバーを抽出し、それらのメンバーを新しいオブジェクトファイルとして処理します。 アーカイブライブラリが変更された場合、リンカーは修正後のアーカイブライブラリに置き換えます。

以前のリンクでアーカイブライブラリから抽出されたオブジェクトファイルは、そのオブジェクトファイル内で定義されているシンボルへの参照がすべて削除されても、出力ロードモジュールに残ります。 リンカーは、次回の初期増分リンクの実行時にこれらのオブジェクトファイルを削除します。

共有ライブラリの処理

初期増分リンクでは、リンカーは共有ライブラリのシンボルテーブルを走査し、未解決のシンボルを通常のリンクと同様に解決します。 増分リンクでは、リンカーは共有ライブラリおよびそのシンボルテーブルを処理せず、共有ライブラリの未解決シンボルは報告しません。 この未解決シンボルは、ダイナミックローダーが検出します。 コマンド行上の共有ライブラリに変更されたものがあれば、リンカーは、初期増分リンクを実行し直します。

性能

オブジェクトファイルの大半を変更した場合は、増分リンカーによる性能の向上は期待できません。

小規模なプログラムでは、増分リンカーでリンクの速度が改善されないことがあり、大規模なプログラムに比べ実行可能ファイルのサイズが増加する割合が大きくなります。

最終の製品モジュールを作成する場合は、増分リンカーを使用しないでください。 増分リンカーはパディングスペースを余分に予約するため、増分リンカーで作成したモジュールは通常のリンカーで作成したモジュールよりもかなり大きくなります。

多言語化対応

環境変数

LDOPTS  

引き数は、コマンド行のほかに、 LDOPTS 環境変数を使ってリンカーに渡すことができます。 リンカーは LDOPTS の値を取得し、その内容をコマンド行の引き数の前に置きます。

LPATH  

ライブラリファイルを検索するデフォルトディレクトリを指定します。 -l オプションを参照してください。

LD_LIBRARY_PATHSHLIB_PATH
  

実行時にライブラリファイルを検索するディレクトリを指定します。 詳細については -s オプションと、 +help オプションの 『『HP-UX リンカー & ライブラリー オンライン ユーザーズガイド』』 を参照してください。

以下の多言語化対応変数は、ld の処理内容に影響します。

LANG  

LC_ALL および他の LC_* 環境変数が指定されていない場合に、 母国語のロケールカテゴリ、ローカルカスタム、およびコード文字セットを定義します。LANG が指定されていない場合、または空文字列が指定されている場合、デフォルトの C (lang(5) を参照) が LANG の代わりに使用されます。

LC_ALL  

すべてのロケールカテゴリの値を定義し、LANG および他の LC_* 環境変数よりも優先的に使用されます。

LC_MESSAGES  

標準エラーに書き込まれる診断メッセージのフォーマット