ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
マニュアルページセクション 1: ユーザーコマンド Oracle Solaris 11 Information Library (日本語) |
- オブジェクトファイル用リンカー
ld [-32 | -64] [-a | -r] [-b] [-Bdirect | nodirect] [-B dynamic | static] [-B eliminate] [-B group] [-B local] [-B reduce] [-B symbolic] [-c name] [-C] [-d y | n] [-D [!]token1,[!]token2,...] [-e epsym] [-f name | -F name] [-G] [-h name] [-i] [-I name] [-l x] [-L path] [-m] [-M mapfile] [-N string] [-o outfile] [-p auditlib] [-P auditlib] [-Q y | n] [-R path] [-s] [-S supportlib] [-t] [-u symname] [-V] [-Y P,dirlist] [-z absexec] [-z allextract | defaultextract | weakextract ] [-z altexec64] [-z assert-deflib[=libname]] [-z combreloc | nocombreloc ] [-z deferred | nodeferred] [-z defs | nodefs] [-z direct | nodirect] [-z endfiltee] [-z fatal-warnings | nofatal-warnings] [-z finiarray=function] [-z globalaudit] [-z groupperm | nogroupperm] [-z guidance[=item1,item2,...]] [-z help ] [-z ignore | record] [-z initarray=function] [-z initfirst] [-z interpose] [-z lazyload | nolazyload] [-z ld32=arg1,arg2,...] [-z ld64=arg1,arg2,...] [-z loadfltr] [-z mapfile-add=name] [-z muldefs] [-z nocompstrtab] [-z nodefaultlib] [-z nodelete] [-z nodlopen] [-z nodump] [-z noldynsym] [-z nopartial] [-z noversion] [-z now] [-z origin] [-z preinitarray=function] [-z redlocsym] [-z relaxreloc] [-z rescan-now] [-z rescan] [-z rescan-start ... -z rescan-end] [-z strip-class=[!]class1,[!]class2,...] [-z stub] [-z symbolcap] [-z target=sparc|x86] [-z text | textwarn | textoff] [-z verbose] [-z wrap=symbol] filename ...
リンカー ld は、シンボル参照をシンボル定義に解決し、再配置することで、再配置可能オブジェクトファイルを組み合わせます。ld は 2 つのモード (静的モードと動的モード) で動作します。モードの指定には、-d オプションを使用します。いずれの場合も、ld のデフォルトの出力は a.out ファイルとなります。「注意事項」を参照してください。
動的モード (-dy、デフォルト) では、引数として指定した再配置可能オブジェクトファイルが結合され、動的実行可能ファイルが生成されます。このファイルは、実行時に、引数として指定した共有オブジェクトファイルに結合されます。-G オプションを指定した場合、再配置可能オブジェクトファイルが結合され、共有オブジェクトファイルが生成されます。-G オプションを指定しない場合、動的実行可能ファイルが作成されます。
静的モード (-dn) では、引数として指定した再配置可能オブジェクトファイルが結合され、静的実行可能ファイルが生成されます。-r オプションを指定した場合、再配置可能オブジェクトファイルが結合され、1 つの再配置可能オブジェクトファイルが生成されます。「静的実行可能ファイル」を参照してください。
Solaris 環境では、動的リンクを使用することで、再配置可能オブジェクトを結合して動的実行可能ファイルと共有オブジェクトを生成します。この環境では、リンカーと実行時リンカー (ld.so.1(1)) の作業は密接に結び付いています。これらのユーティリティーはどちらも、関連テクノロジおよびユーティリティーと合わせて『リンカーとライブラリ』で広範囲にわたり説明されています。
ライブラリを引数として指定した場合、ld がそのライブラリを検索するのは、デフォルトでは、引数リスト内でそのライブラリに遭遇したときに 1 度だけです。ライブラリとして指定できるのは、共有オブジェクトまたは再配置可能アーカイブのどちらかです。ar.h(3HEAD) を参照してください。
共有オブジェクトは不可分の完全なユニットで、1 つ以上の入力ファイルをリンクすることによって生成されます。リンカーが共有オブジェクトを処理すると、共有オブジェクトの全内容は、その結果作成された出力ファイルイメージの論理的な部分になります。共有オブジェクトが実際に取り込まれるのはプロセスの実行時であるため、リンク処理中に物理的なコピー処理が行われることはありません。この論理的な組み込みは、リンク編集プロセスにとって共有オブジェクト内に定義されたすべてのシンボルエントリが利用可能になることを意味しています。『リンカーとライブラリ』の第 4 章「共有オブジェクト」を参照してください。
アーカイブライブラリの場合、ld は、未解決の外部参照を定義するルーチンだけをロードします。ld は、アーカイブライブラリのシンボルテーブルを順番に検索して、ライブラリメンバーで外部参照を解決しようとします。この検索は、アーカイブで外部参照を解決できなくなるまで繰り返されます。したがって、1 つの外部シンボルを複数のライブラリメンバーが定義する場合を除いて、ライブラリ内の順序は機能的には重要ではありません。相互依存があるアーカイブライブラリでは、複数のコマンド行定義または -z rescan オプションの 1 つを使用する必要があります。『リンカーとライブラリ』の「アーカイブ処理」を参照してください。
ld はクロスリンカーで、SPARC または x86 ターゲットに対して 32 ビットオブジェクトまたは 64 ビットオブジェクトをリンクできます。ld の操作モードは、コマンド行の最初の再配置可能オブジェクトの ELF クラスおよび機械タイプによって制御されます。32 ビットオブジェクトと 64 ビットオブジェクトを混在させることはできません。同様に、1 つの機械タイプのオブジェクトのみが許可されます。-32、-64 および -z target オプションと LD_NOEXEC_64 環境変数を参照してください。
静的実行可能ファイルは、多くのリリースで作成しないように勧められています。実際、64 ビットシステムアーカイブライブラリが提供されたことはありません。静的実行可能ファイルは、システムアーカイブライブラリに反して構築されるので、実行可能ファイルにはシステム実装の詳細が含まれます。この自己内包には、多数の欠点があります。
この実行可能ファイルは、共有オブジェクトとして提供されるシステムパッチの恩恵を受けることができません。したがって、多くのシステムの改良を利用するには、この実行可能ファイルを再構築する必要があります。
将来のリリースでこの実行可能ファイルを実行できなくなる可能性があります。
システム実装の詳細を複製すると、システムのパフォーマンスに悪影響を与えます。
Solaris 10 では、32 ビットのシステムアーカイブライブラリは提供されません。これらのライブラリ (特に、libc.a) がなくなるため、特別なシステム知識がなければ、静的実行可能ファイルは作成できません。ただし、静的リンクオプションを処理する ld の機能とアーカイブライブラリの処理に変更はありません。
以下のオプションがサポートされています。
32 ビットまたは 64 ビットオブジェクトを作成します。
デフォルトでの生成されるオブジェクトのクラスは、コマンド行から処理される最初の ELF オブジェクトによって決まります。オブジェクトを指定してしない場合、クラスは、コマンド行から処理される最初のアーカイブ内で検出された最初のオブジェクトによって決まります。オブジェクトもアーカイブもない場合、リンカーは 32 ビットオブジェクトを作成します。
-64 オプションは、64 ビットオブジェクトを mapfile からのみ作成する場合に必要です。
-32 または -64 オプションは、32 ビットと 64 ビットのオブジェクトが混在するアーカイブからすべてをリンクするというごくまれな場合にも使用できます。アーカイブの最初のオブジェクトが、作成される必要のあるオブジェクトのクラスではない場合、-32 または -64 オプションを使用してリンカーに指示できます。
静的モードでのみ、静的実行可能ファイルを生成します。未定義の参照があるとエラーを発行します (静的モードのデフォルトの動作)。-a オプションは、-r オプションと同時に使用することはできません。「機能説明」の「静的実行可能ファイル」を参照してください。
動的モード専用です。動的実行可能ファイルに対して、共有オブジェクト内のシンボルを参照するような特殊な再配置処理を行いません。-b オプションを指定しない場合、リンカーは、テキストセグメントが読み取り専用のままになるように動的実行可能ファイル内でいくつかの方法を適用します。1 つの方法は、共有オブジェクトで定義されている関数への参照に対して位置独立型の特別な再配置を作成することです。もう 1 つの方法は、共有オブジェクト内に定義されているデータオブジェクトが実行時に実行可能ファイルのメモリーイメージにコピーされるように設定することです。
このオプションは、特殊化された動的オブジェクトを対象としているため、一般的な用途に使用することはお勧めしません。-このオプションを使用すると、オブジェクトを共有可能にするために必要な特殊処理がすべて無効になります。また、64 ビット実行可能オブジェクトの再配置を妨げることもあります。
これらのオプションで直接結合を制御します。-B direct は、各シンボル参照間の関係を、その定義を提供している依存関係とともに記録することによって、直接結合の情報を確立します。また、直接結合の情報は、各シンボル参照と作成されたオブジェクト内で関連付けられた定義の間で確立されます。実行時リンカーは、デフォルトのシンボル検索を行わずに、この情報を使用して、関連付けられたオブジェクト中のシンボルを直接検索します。
直接結合情報は、リンク編集で指定される依存関係に対してのみ確立されます。そのため、リンク時に -z defs オプションを使用する必要があります。直接結合中のシンボルよりも優先させたいオブジェクトは、-z interpose オプションを使用して指定する必要があります。-B direct オプションを使用すると、すべての依存関係に対して -z lazyload が有効になります。
-B nodirect オプションは、作成されているオブジェクトによって提供されるインタフェースとの直接結合をすべて回避させます。-z direct オプションを指定すると、作成されているオブジェクトは外部インタフェースと直接結合を続けられます。『リンカーとライブラリ』の第 9 章「直接結合」を参照してください。
ライブラリの取り込みを制御するオプションです。-B dynamic は、動的モードでのみ有効です。-B dynamic オプション、-B static オプションは、コマンド行のトグルとして何度でも指定できます。たとえば、B static オプションを指定すると、次に B dynamic オプションが指定されるまで共有オブジェクトは受け入れられなくなります。-l オプションを参照してください。
バージョン定義に割り当てられていない大域シンボルを、シンボルテーブルから削除します。バージョン定義とは、生成されたオブジェクト内で外部から参照可能なままにしておく必要がある大域シンボルを指定するもので、mapfile によって提供されます。このオプションでは、mapfile バージョン定義の一部として使用する auto-elimination 指令と同じようなシンボル削除処理が行われます。このオプションは、バージョン化された再配置可能オブジェクトとバージョン化されていない再配置可能オブジェクトを統合する場合に便利です。-B local オプションと -B reduce オプションも参照してください。『リンカーとライブラリ』の「SYMBOL_SCOPE/SYMBOL_VERSION 指令」を参照してください。
共有オブジェクトとその依存オブジェクトを 1 つのグループにまとめます。グループ内のオブジェクトは、実行時に、グループ内のほかのメンバーに結合されます。このモードは、dlopen(3C) を RTLD_GROUP モードとともに使用してプロセスにオブジェクトを追加する場合と同様です。あるグループに属しているオブジェクトに対して明示的な依存関係を持つオブジェクトは、自分自身もそのグループのメンバーになります。
グループは自己完結している (依存関係がグループ内で解決されている) 必要があるため、-z defs オプションを追加して、グループが自己完結していることを確認してください。-
バージョン定義に割り当てられていない大域シンボルの割り当てを変更して、ローカルシンボルにします。バージョン定義とは、生成されたオブジェクト内で外部から参照可能なままにしておく必要がある大域シンボルを指定するもので、mapfile によって提供されます。このオプションでは、mapfile バージョン定義の一部として使用する auto-reduction 指令と同じようなシンボルの割り当て変更処理を実行できます。この機能は、バージョン化された再配置可能オブジェクトとバージョン化されていない再配置可能オブジェクトを統合する場合に便利です。-B eliminate オプションと -B reduce オプションも参照してください。『リンカーとライブラリ』の「SYMBOL_SCOPE/SYMBOL_VERSION 指令」を参照してください。
再配置可能オブジェクトを生成する際、バージョン定義で指定されているシンボル情報を縮約します。バージョン定義とは、生成されたオブジェクト内で外部から参照可能なままにしておく必要がある大域シンボルを指定するもので、mapfile によって提供されます。デフォルトでは、再配置オブジェクトが生成されると、バージョン定義は出力イメージに単純に転記されます。シンボル情報の縮約は、動的実行可能ファイルまたは共有オブジェクトの構築にオブジェクト自体が使用されるまで、実際には行われません。動的実行可能ファイルや共有オブジェクトを生成するときには、自動的に -B reduce オプションが適用されます。
動的モード専用です。共有オブジェクトを作成する際、可能であれば、大域シンボルへの参照を共有オブジェクト内の参照定義に結合します。通常、共有オブジェクト内の大域シンボルへの参照は、定義が使用可能でも実行時まで結合されません。このため、実行可能オブジェクト内またはほかの共有オブジェクト内に定義された同一のシンボルによって、オブジェクト自体の定義が無効になる可能性があります。-z defs オプションによって無効にしないかぎり、ld はシンボルが未定義であることを知らせる警告を出力します。
このオプションは、特殊化された動的オブジェクトを対象としているため、一般的な用途に使用することはお勧めしません。-オブジェクトで必要とされる実行時の再配置処理を軽減するには、バージョン定義を作成することをお勧めします。
実行時に使用する構成ファイル name を記録します。構成ファイルは、デフォルト検索パスの変更やディレクトリキャッシュの提供に使用されるほか、代替オブジェクトの依存関係を提供します。crle(1) のマニュアルページを参照してください。
診断メッセージに表示される C++ シンボル名を復号化します。
-d y が指定されている場合 (デフォルト)、ld は動的リンクを使用します。-d n が指定されている場合、ld は静的リンクを使用します。「機能説明」の「静的実行可能ファイル」および -B dynamic | static の項目を参照してください。
token に指定したデバッグ情報を標準エラーに出力します。help は、使用可能なトークンをすべて指定した場合と同じ意味を持つ特殊なトークンです。『リンカーとライブラリ』の「デバッグ支援」を参照してください。
出力ファイルのエントリポイントのアドレスとして、シンボル epsym に設定します。
共有オブジェクトの作成時に使用するオプションです。このオプションを指定すると、共有オブジェクトのシンボルテーブルが、name に指定した共有オブジェクトのシンボルテーブルで、補助フィルタとして使用されるようになります。このオプションは複数回指定できますが、本オプションは -F と同時に指定することはできません。『リンカーとライブラリ』の「補助フィルタの生成」を参照してください。
共有オブジェクトの作成時に使用するオプションです。このオプションを指定すると、共有オブジェクトのシンボルテーブルが、name に指定した共有オブジェクトのシンボルテーブルで、フィルタとして使用されるようになります。このオプションは複数回指定できますが、本オプションは -f と同時に指定することはできません。『リンカーとライブラリ』の「標準フィルタの生成」を参照してください。
動的モード専用です。共有オブジェクトを生成します。未定義のシンボルも許容されます。『リンカーとライブラリ』の第 4 章「共有オブジェクト」を参照してください。
動的モード専用です。共有オブジェクトの作成時、name をオブジェクトの動的セクションに記録します。ファイルシステムにおけるオブジェクトの名前ではなく、name がこのオブジェクトにリンクされた任意の動的オブジェクトに記録されます。このため、実行時リンカーは、実行時に検索する共有オブジェクト名として name を使用します。『リンカーとライブラリ』の「共有オブジェクト名の記録」を参照してください。
LD_LIBRARY_PATH の設定を無視します。LD_LIBRARY_PATH の設定がリンク処理の妨げになる場合は、このオプションを使用して、実行時のライブラリ検索への影響を防ぎます。
実行可能オブジェクトの作成時、プログラムヘッダーに書き込まれるインタプリタのパス名として name を使用します。静的モードのデフォルトの設定では、インタプリタは使用されません。動的モードのデフォルトの設定では、実行時リンカー ld.so.1(1) が使用されます。どちらの場合も、-I name でデフォルトの設定を無効にできます。exec(2) は、a.out を読み込む際にこのインタプリタをロードし、a.out ではなくインタプリタに制御を渡します。
ライブラリ libx.so (共有オブジェクトの慣例的な名前) または libx.a (アーカイブライブラリの慣例的な名前) を検索します。動的モードでは、-B static オプションが有効になっている場合を除けば、ライブラリ検索パスに指定された各ディレクトリ内で、libx.so ファイルまたは libx.a ファイルが検索されます。ディレクトリ検索は、どちらかのファイルが入っているディレクトリを検出した時点で終了します。-lx が、libx.so、libx.a という形式の名前を持つ 2 つのファイルに展開される場合、.so ファイルが選択され、libx.so が見つからない場合は libx.a が選択されます。静的モードを使用している場合や -B static オプションが有効になっている場合は、.a ファイルだけが選択されます。ld は、ライブラリの名前を検出した時点でライブラリの検索を実行するので、-l の位置は重要な意味を持ちます。『リンカーとライブラリ』の「追加ライブラリとのリンク」を参照してください。
path をライブラリ検索ディレクトリに追加します。ld のライブラリ検索は、まず -L オプションで指定したディレクトリで行われ、次に標準ディレクトリで行われます。このオプションは、同一コマンド行の -l オプションより前に指定した場合のみ有効です。-『リンカーとライブラリ』の「リンカーが検索するディレクトリ」を参照してください。
環境変数 LD_LIBRARY_PATH はライブラリ検索パスの補完に使用できますが、実行時環境によっても解釈されるため、-L オプションを使用することをお勧めします。「環境変数」の「LD_LIBRARY_PATH」を参照してください。
メモリーマップ (入出力セクションのリスト) と、致命的ではない多重定義シンボルを生成し、標準出力に出力します。
マップファイル mapfile を、ld への指令が記述されているテキストファイルとして読み取ります。このオプションは複数回指定できます。mapfile がディレクトリの場合、stat(2) で定義されるように、そのディレクトリ内のすべての通常ファイルが処理対象になります。『リンカーとライブラリ』の付録 B「System V Release 4 (バージョン 1) Mapfile」を参照してください。マップファイルの例は、/usr/lib/ld にあります。「ファイル」を参照してください。
このオプションを指定すると、作成されるオブジェクトの .dynamic セクションに DT_NEEDED エントリが追加されます。DT_NEEDED 文字列の値はコマンド行で指定した string です。このオプションは位置に依存します。このため、DT_NEEDED .dynamic エントリはリンク行にあるほかの動的な依存オブジェクトに対して相対的になります。デバイスドライバの再配置可能オブジェクト間の依存関係を指定するときに、このオプションをオプション -dy および -r と組み合わせて使用すると便利です。
outfile という名前の出力オブジェクトファイルを生成します。デフォルトのオブジェクトファイル名は、a.out です。
監査ライブラリ auditlib を識別します。このライブラリは、作成されたオブジェクトの実行時に行われる監査に使用されます。自分自身の監査を行うような共有オブジェクトと依存関係にあるオブジェクトは、この共有オブジェクトの性質を継承し、自分自身の監査を行います- (-P オプションを参照)。『リンカーとライブラリ』の「実行時リンカーの監査インタフェース」を参照してください。
監査ライブラリ auditlib を識別します。このライブラリは、作成されたオブジェクトの実行時に行われる依存関係の監査に使用されます。この監査は、このオブジェクトと依存関係にあり、監査を行う必要があるオブジェクトから継承される場合もあります-p オプションと -z globalaudit オプションを参照してください。『リンカーとライブラリ』の「実行時リンカーの監査インタフェース」を参照してください。
-Q y を指定すると、ident 文字列が、出力ファイルの .comment セクションに追加されます。この文字列は、ファイル作成に使用された ld のバージョンを識別します。このため、ld -r を使用した場合など、複数のリンク手順を経て作成されたファイルには、複数の ld idents があることになります。この識別は、cc コマンドのデフォルト時の動作と同じです。-Q n は、バージョンの識別を抑止します。.comment セクションは mcs(1) ユーティリティーで操作できます。
複数の再配置可能オブジェクトファイルを結合して、1 つの再配置可能オブジェクトを生成します。ld は、未解決の参照があってもメッセージを出力しません。このオプションは、-a と同時には使用できません。
複数のディレクトリをコロンで区切って指定します。このリストは、実行時リンカーにライブラリ検索ディレクトリを指定する際に使用されます。NULL 以外の文字列は、出力オブジェクトファイルに記録され、実行時リンカーに渡されます。このオプションを複数回指定する場合と、コロンで区切って path を指定する場合の結果は同じになります。『リンカーとライブラリ』の「実行時リンカーが検索するディレクトリ」を参照してください。
関連オブジェクト内で runpath を使用する方が、LD_LIBRARY_PATH 環境変数を使用するなどの方法でグローバル検索パスを設定するよりも適切です。オブジェクトの依存関係を探すために必要な runpaths のみ記録するようにしてください。ldd(1) を -U オプションとともに使用すると、動的オブジェクト内の未使用の runpaths を探すこともできます。
また、runpath で提供されるさまざまなトークンを使用すると、システムの機能やオブジェクトの位置を柔軟に識別できます。『リンカーとライブラリ』の第 6 章「動的ストリングトークンによる依存関係の確立」を参照してください。$ORIGIN トークンは、ファイルシステム内で動的オブジェクトを別の場所に再配置できるようにする場合に特に便利です。
出力ファイルからシンボル情報をすべて取り除きます。このオプションは、-z strip-class オプションを debug と symbol クラス識別子とともに使用することと同等です。-z redlocsym および -z noldynsym オプションも参照してください。
ld によって共有オブジェクト supportlib が読み込まれ、リンクプロセスに関する情報が提供されます。-S オプションを使用して定義された共有オブジェクトは、SGS_SUPPORT 環境変数を使用して提供することもできます。『リンカーとライブラリ』の「リンカーのサポートインタフェース」を参照してください。
サイズの異なる多重定義シンボルを検出した場合の警告の出力を抑止します。
symname を、未定義シンボルとしてシンボルテーブルに入力します。このオプションは、すべてのルーチンをアーカイブライブラリから読み込む場合に便利です。これは、最初のルーチンを読み込むために、未解決の参照が必要になるからです。コマンド行内でのこのオプションの位置は重要な意味を持ち、シンボルを定義するライブラリより前に配置する必要があります。『リンカーとライブラリ』の「-u オプションを使用した追加シンボルの定義」を参照してください。
使用する ld のバージョン情報を示すメッセージを出力します。
ライブラリ検索に使用するデフォルトのディレクトリを変更します。dirlist には、複数のパスをコロンで区切って指定します。
動的実行可能オブジェクトを構築する場合にのみ効果を発揮します。このオプションは、外部の絶対的シンボルへの参照を、実行時ではなく今すぐに解決するよう指示します。これによって、ある条件が整った場合には、動的オブジェクトがスワップ領域を大量に消費する可能性のあるテキストの再配置を行わなくなります。
後続のすべてのアーカイブのオブジェクトの抽出条件を変更します。デフォルトでは、アーカイブメンバーは、未定義の参照を解決し、データ定義による仮の定義を行うために抽出されます。弱いシンボル参照は抽出を行いません。-z allextract または --whole-archive オプションでは、すべてのアーカイブメンバーがアーカイブから抽出されます。-z weakextract を指定すると、弱い参照によってアーカイブの抽出が行われます。-z defaultextract または --no-whole-archive オプションを指定すると、すでに指定されている抽出オプションを無効にし、デフォルトの状態に戻すことができます。『リンカーとライブラリ』の「アーカイブ処理」を参照してください。
64 ビットの ld を実行します。これまでは、実行されたリンカーのクラスは、作成された ELF オブジェクトのクラスによって決まっていました。現在では、実行されるリンカーのクラスは、ベースとなるシステムのクラスによって決まります。通常は 64 ビットです。このオプションは、下位互換性を確保するために残されています。
-l コマンド行オプションで指定したライブラリに対して、リンカーで指定したデフォルト検索パスの検査によって検出される警告メッセージを有効にします。libname の値を指定するとデフォルトのライブラリ警告機能が有効になり、指定したライブラリが、警告を出力しないライブラリの一覧に追加されます。複数の -z assert-deflib オプションを指定すると、警告を出力してはいけないライブラリを複数指定できます。
libname の値は、リンカーで検出されたときのように、パスコンポーネントのないライブラリファイル名にする必要があります。たとえば、次のように指定すると、デフォルトのライブラリ警告が有効になり、標準 C ライブラリが除外されます。
ld ... -z assert-deflib=libc.so ...
-z assert-deflib は、同名のオブジェクトが複数存在し、使用ライブラリを厳密に管理する必要がある構築環境を主に対象とした特殊なオプションです。一般的な用途向けではない場合。
デフォルトでは、ld は、実行可能ファイルまたは共有オブジェクトを作成するときに複数の再配置セクションを結合します。このセクション結合は再配置可能オブジェクトとは異なるもので、再配置可能セクションでは、再配置の適用が必要なセクションと 1 対 1 の関係が維持されます。-z nocombreloc オプションは、この再配置セクションのマージを無効にし、元の再配置可能オブジェクトで見つかった 1 対 1 の関係を保持します。
ld は、データ再配置セクションのエントリを、そのシンボル参照に従ってソートします。これにより、実行時のシンボル参照を最低限に抑えます。複数の再配置セクションが結合されている場合は、これにより、オブジェクトがメモリーに読み込まれるときの再配置オーバーヘッドを最低限に抑え、動的オブジェクトの実行時の読み込みを速くします。
これまでは、個々の再配置セクションはすべての実行可能ファイルまたは共有オブジェクトに引き継がれ、前述した再配置セクションのマージを有効にするには -z combreloc オプションが必要でした。現在では、再配置セクションのマージはデフォルトになっています。-z combreloc オプションは古い構築環境のために受け入れられますが、このオプションは不必要で効果はありません。
動的依存関係への遅延の印の付加を有効または無効にします。遅延の印を付けられた動的依存関係にはレイジー読み込み可能の印も付けられ、初期プロセスの起動では読み込まれません。遅延依存関係の読み込みは、そのレイジー参照への結合がはじめて行われたときに行われます。基本的なレイジー読み込み可能な依存関係とは異なり、遅延依存関係は LD_BIND_NOW プロセスの一部として、または RTLD_NOW フラグが設定された dlopen(3C) を介して処理されることはありません。『リンカーとライブラリ』の「動的依存関係の遅延読み込み」を参照してください。
遅延依存関係を dlsym(3C) および RTLD_PROBE ハンドルとともに使用すると、自然なコーディングスタイルを使用して柔軟な方法で機能テストを実行できます。
-z defs オプションと --no-undefined オプションは、リンク終了時に未定義のシンボルがあると、致命的エラーを強制的に出力します。これは、実行可能オブジェクトを作成する場合のデフォルトの設定ですが、歴史的経緯から、共有オブジェクトを作成する場合にはデフォルトではありません。共有オブジェクト作成時に、そのオブジェクトが自己完結していることを確認できるため、-z defs オプションを使用することをお勧めします。自己完結しているオブジェクトでは、シンボル参照がそのオブジェクト内またはそのオブジェクトの依存関係の中で解決されています。
-z nodefs オプションは、未定義のシンボルを許可します。歴史的経緯から、共有オブジェクトを作成する場合には、この動作がデフォルトになっています。このオプションを実行可能ファイルに対して指定した場合の、未定義のシンボルに対する参照の動作は不確定です。-z nodefs オプションを使用することは、お勧めしません。
コマンド行であとに続くすべての依存関係への直接結合を有効または無効にします。このオプションにより、対応するグローバルなオプション -B direct よりも直接結合を効率よく制御できます。-z direct オプションは、次の点で -B direct オプションとも異なります。直接結合の情報は、シンボル参照と作成されたオブジェクト内で関連付けられた定義の間では確立されません。レイジー読み込みは無効です。
フィルタ処理の対象オブジェクトに印をつけます。フィルタによる検索処理は、このオブジェクトを検出した時点で終了します。『リンカーとライブラリ』の「「フィルティー」検索の縮小」を参照してください。
-z fatal-warnings と --fatal-warnings オプションを指定すると、リンカーは警告を致命的エラーとして扱います。
-z nofatal-warnings と --no-fatal-warnings オプションを指定すると、リンカーは警告を致命的でないエラーとして扱います。これはデフォルトの動作です。
構築するオブジェクトの .fini_array セクションにエントリを追加します。.fini_array セクションが存在しない場合は、1 つのセクションを新たに作成します。追加されたエントリは function を指すように初期化されます。『リンカーとライブラリ』の「初期設定および終了セクション」を参照してください。
このオプションは、-P オプションを使用して記録された監査ライブラリの定義を補足します。このオプションは、動的実行可能ファイルの構築時にのみ意味を持ちます。-P オプションを使用してオブジェクト内で定義された監査ライブラリを使用すると、通常、そのオブジェクトの直接の依存関係を監査できます。 -z globalaudit は、監査者をグローバルな監査者に昇格させることによって、すべての依存関係を監査できるようにします。『リンカーとライブラリ』の「監査インタフェースの呼び出し」を参照してください。
-P オプションと -z globalaudit オプションを使用して確立された監査者は、LD_AUDIT 環境変数を使用して確立された監査者と同等です。ld.so.1(1) を参照してください。
一意のグループにつながる依存関係の割り当て、または割り当ての解除を行います。グループに対して依存関係の割り当てを行うと、-B group オプションを使って依存関係を構築した場合と同じ効果が得られます。
生成されるオブジェクトの品質を高めるか、それ以外のメリットがあると考えられる ld オプションを提案するガイダンスメッセージを表示します。提供される個々のガイダンスは、システムの進化に伴って変更される可能性があります。古いバージョンの ld で提供されていた廃止済みのガイダンスは、新しいバージョンでは削除されることがあります。同様に、新しいガイダンスが新しいバージョンの ld に追加されることがあります。したがって、ガイダンスには常に最新のベストプラクティスが表示されます。
ガイダンスを有効にすると同時に特定のガイダンスメッセージが表示されないようにするには、表示しないガイダンスのクラスを示す item トークンの一覧を指定します。これにより、不要なアドバイスは表示されなくなりますが、それ以外のガイダンスは活用できます。ld は認識されない item トークンを何も出力せずに無視するため、指定した ld コマンド行を新旧さまざまなバージョンの Solaris で実行できます。
現在のバージョンの ld で提供されるガイダンスと、これらのメッセージを無効にするために使用する item トークンは次のとおりです。
動的実行可能ファイルと共有オブジェクトでは、必要とする依存関係をすべて明示的に定義する必要があります。ガイダンスでは、動的オブジェクトの作成時にシンボル参照が不十分な場合には、-z defs オプションの使用を推奨しています。このガイダンスは、-z guidance=nodefs で無効にできます。
動的実行可能ファイルおよび共有オブジェクトでは、動的オブジェクトによって作成されたシンボル参照に適合しない依存関係を定義してはいけません。ガイダンスでは、未使用の依存関係を削除するよう推奨しています。このガイダンスは、-z guidance=nounused で無効にできます。
レイジー読み込みでは依存関係を識別する必要があります。ガイダンスでは、-z lazyload または -z nolazyload オプションが出現する前にすべての依存関係が処理される場合、-z lazyload オプションの使用を推奨しています。このガイダンスは、-z guidance=nolazyload で無効にできます。
直接結合を使用して依存関係を参照する必要があります。ガイダンスでは、-B direct と -z direct オプションのどちらか、または -z nodirect オプションが出現する前に依存関係が処理される場合、B direct と z direct のどちらかのオプションの使用を推奨しています。このガイダンスは、-z guidance=nodirect で無効にできます。
動的オブジェクトでは、書き込み不可で割り当て可能なセクションに再配置を行なってはいけません。ガイダンスでは、テキストセグメントに対して再配置が残っていて、-z textwarn オプションも -z textoff オプションも検出されない場合、位置独立コード (PIC) でのオブジェクトのコンパイルを推奨しています。このガイダンスは、-z guidance=notext で無効にできます。
すべての mapfile は、バージョン 2 の mapfile 構文を使用する必要があります。ガイダンスでは、バージョン 1 の構文を使用する mapfile が検出された場合、バージョン 2 の構文の使用を推奨しています。このガイダンスは -z guidance=nomapfile で無効にできます。
ld によって不適切な依存関係が検出されると、何も出力されずに無視されます。たとえば、64 ビットのオブジェクト生成時に検出された 32 ビットの依存関係は無視されます。このような依存関係は、誤った -L オプションが設定されるなど、検索パスの設定が正しくないことから生じる可能性があります。この依存関係があっても問題ではありませんが、この依存関係を処理する必要はなく、解決の必要がある作成時の問題が隠れてしまうおそれがあります。ガイダンスでは、不適切な依存関係はすべて削除することを推奨しています。このガイダンスは、-z guidance=nolibpath で無効にできます。
また、-z guidance=noall でガイダンス機能をすべて無効にできます。適切なオブジェクトを作成するためのガイダンスおよびアドバイスについて詳しくは、『リンカーとライブラリ』の第 7 章「リンカーのクイックリファレンス」を参照してください。
標準出力にコマンド行オプションの要約を出力して終了します。
リンク処理の一部として参照されない動的依存関係を無視または記録します。リンク処理の一部として読み込まれたが参照されない再配置オブジェクトの ELF セクションを無視または記録します。デフォルトでは -z record が有効です。
ELF セクションを無視すると、このセクションは生成される出力ファイルから削除されます。あるセクションを無視するには、次の 3 つの条件が真である必要があります。つまり、そのセクションが割り当て可能なセグメントで使用されていること、そのセクションがグローバルシンボルを提供していないこと、そして、リンク処理で使用するオブジェクトのセクションがそのセクションを参照していないことです。
構築するオブジェクトの .init_array セクションにエントリを追加します。.init_array セクションが存在しない場合は、1 つのセクションを新たに作成します。追加されたエントリは function を指すように初期化されます。『リンカーとライブラリ』の「初期設定および終了セクション」を参照してください。
オブジェクトの実行時初期設定が完了してから、ほかのオブジェクトの実行時初期設定を同時処理します。また、同時プロセスから除去されたほかのすべてのオブジェクトの実行時最終設定が完了してから、オブジェクトの実行時最終設定が行われるようにします。このオプションは共有オブジェクトの作成時にのみ有用です。
直接結合よりも優先して検索するオブジェクトを指定します。実行時に、-z interpose オプションでオブジェクトにタグが付けられている場合、そのオブジェクトは明示的な割り込みとして識別されます。明示的な割り込みは、オブジェクトが LD_PRELOAD 環境変数を使用して読み込まれたときにも設定されます。オブジェクトの読み込み順序が原因で暗黙的な割り込みが発生することがありますが、この暗黙的な割り込みは実行時リンカーにとっては未知のものです。明示的な割り込みでは、オブジェクトの読み込み順序にかかわらず割り込みを発生させることができます。また、直接結合が有効な場合には、明示的な割り込みによって、実行時リンカーが任意の明示的な割り込み内でシンボルを検索できるようになります。
遅延して読み込まれる動的な依存オブジェクトの指定を有効または無効にします。lazyload と指定された動的な依存オブジェクトは、初期プロセスの起動では読み込まれません。オブジェクトの読み込みは、はじめてこのオブジェクトへの結合が行われたときに行われます。注: レイジー読み込みには、正しい依存宣言と、プロセス内で使用される動的オブジェクトごとに関連する runpaths が必要です。『リンカーとライブラリ』の「動的依存関係の遅延読み込み」を参照してください。
リンカーのクラスは、作成される出力ファイルのクラスおよびリンカーが実行されているオペレーティングシステムの機能によって変わります。-z ld[32|64] オプションでは、すべてのリンカーの引数を定義できます。定義された引数は、それぞれ 32 ビットクラスまたは 64 ビットクラスのリンカーによって解釈のみが行われます。
たとえば、サポートするライブラリがクラスに固有のものである場合に、そのライブラリに正しいクラスを指定するには、次のようにします。
ld ... -z ld32=-Saudit32.so.1 -z ld64=-Saudit64.so.1 ...
フィルタ対象が実行時ただちに処理されることを要求するように、フィルタに指定します。通常、フィルタ処理は、シンボル参照がフィルタに結合されたときにはじめて行われます。このフラグを持つオブジェクトの実行時プロセスは、環境変数 LD_LOADFLTR が設定されている場合と同じように動作します。ld.so.1(1) を参照してください。
name を既知の mapfile 条件入力式の述部の一覧に追加します。このオプションは、リンカーによって読み取られる最初の mapfile の先頭に次の行を挿入することと同等です。
$mapfile_version 2 $add name
-z mapfile-add で入力された名前を mapfile $if および $elif 指令とともに使用すると、mapfile 入力を条件に応じて処理できます。『リンカーとライブラリ』の第 10 章「mapfile」を参照してください。
複数のシンボル定義を許容します。デフォルトでは、再配置可能オブジェクト間で重複したシンボル定義が発生すると、致命的なエラーになります。ところが、このオプションを指定すると、エラーにはならずに、最初の定義が有効な定義として使用されます。
ELF 文字列テーブルの圧縮を無効にします。デフォルトでは、文字列圧縮が、SHT_STRTAB セクション、および SHF_MERGE と SHF_STRINGS セクションフラグが設定されている SHT_PROGBITS セクションに適用されます。
オブジェクトが、実行時デフォルトライブラリ検索パス (LD_LIBRARY_PATH や実行パスの後に使用) を無視するように指定します。このように指定すると、すべての依存オブジェクトが実行パスを使用することになります。
実行時に削除できないように、オブジェクトに指定します。このモードは、dlopen(3C) を RTLD_NODELETE モードとともに使用してプロセスにオブジェクトを追加する場合と同様です。
オブジェクトを、dlopen(3C) では利用できないように指定するか、dlopen() によって指定されたオブジェクトとして指定します。または dlopen() によって指定されたオブジェクトに必要な依存オブジェクトとして指定します。このオプションは共有オブジェクトの作成時にのみ有用です。
オブジェクトを、dldump(3C) では利用できないように指定します。
動的実行可能ファイルまたは共有オブジェクトに .SUNW_ldynsym セクションが含まれないようにします。.SUNW_ldynsym セクションは、ローカル関数用のシンボルを提供することで .dynsym セクションを拡張します。ローカル関数のシンボルを使用すると、デバッガで、シンボル名などが削除されたプログラムからスタックトレースにローカル関数名を表示できるようになります。同様に、dladdr(3C) では、より正確な結果を出力できます。
-z noldynsym オプションも、.SUNW_ldynsym セクションに関連する 2 つのソートセクションが含まれないようにします。.SUNW_dynsymsort セクションでは、通常の関数と変数シンボルにソートアクセスできます。.SUNW_dyntlssort セクションでは、スレッドローカル記憶領域 (TLS) 変数シンボルにソートアクセスできます。
.SUNW_ldynsym、.SUNW_dynsymsort、および .SUNW_dyntlssort セクションは、結果ファイルの割り当て可能なテキストセグメントの一部となりますが、strip(1) によって削除することはできません。したがって、これらのセクションが含まれないようにする唯一の方法は、-z noldynsym オプションを使用することです。
部分的に初期化されたシンボルが、再配置可能なオブジェクト内に定義されている場合、このシンボルは、生成される出力ファイルで展開されます。
どのバージョンのセクションも記録しません。バージョンセクションや関連する .dynamic セクションエントリは、出力イメージ内に生成されません。
オブジェクトがレイジーでない実行時結合を要求するように指定します。このモードは、dlopen(3C) を RTLD_NOW モードとともに使用してプロセスにオブジェクトを追加する場合と同様です。また、このモードは、LD_BIND_NOW 環境変数を有効にする場合と同様です。ld.so.1(1) を参照してください。
実行時ただちに $ORIGIN を処理することを要求するように、オブジェクトに指定します。この動作は現在はデフォルトです。このオプションは、従来機能との互換性のためにのみ残されています。
構築するオブジェクトの .preinit_array セクションにエントリを追加します。.preinit_array セクションが存在しない場合は、1 つのセクションを新たに作成します。追加されたエントリは function を指すように初期化されます。『リンカーとライブラリ』の「初期設定および終了セクション」を参照してください。
SHT_SYMTAB シンボルテーブルから、SECT シンボル以外のすべてのローカルシンボルを削除します。ローカルシンボルを参照する配置はすべて更新され、SECT シンボルを参照するようになります。このオプションを使用すると、特殊化されたオブジェクトのテーブルサイズを大幅に削減できます。-z strip-class および -z noldynsym オプションも参照してください。
-z redlocsym オプションは、オペレーティングシステムカーネル内部で使用されるような特殊なオブジェクトに対して有用ですが、一般的な用途には推奨されません。シンボルテーブル SHT_SYMTAB のサイズは実行時動作に影響せず、ローカルシンボルを削除するとプロセスの可観測性が低下する可能性があります。ローカルシンボルを削除すると、コンパイラドライバ -g オプションを使用して生成されるデバッグ情報が少なくなる可能性があります。また、ローカルシンボルを削除すると、通常時に .SUNW_ldynsym セクションに書き込まれる情報がなくなり、pstack(1) や truss(1) などのデバッガおよびツールの有効性が低下します。
ld は、通常、削除された COMDAT セクションを参照するシンボルを使用して再配置を検出したときに致命的なエラーを出力します。-z relaxreloc が有効な場合、ld は、その代わりに、保持されていた COMDAT セクション内の同等のシンボルにこのような再配置をリダイレクトします。-z relaxreloc は、主にコンパイラ作成者を対象とした特殊なオプションで、一般的な用途向けではありません。
これらのオプションは、リンカーに渡されたアーカイブファイルを再走査します。デフォルトでは、アーカイブの検索は、コマンド行に指定されたときに一度だけ処理されます。通常アーカイブは、そのシンボル定義でアーカイブの前に指定されている参照を解決できるように、コマンド行の最後に指定します。ただし、実際には、アーカイブ間での相互依存関係を解決するために、アーカイブ自体を複数回指定しなければならないことがあります。
-z rescan-now は位置オプションで、コマンド行上で検出されるとただちにリンカーによって処理されます。コマンド行上でそのポイントに達したすべてのアーカイブはただちに処理され、シンボル参照を解決する追加のアーカイブメンバーを見つけ出そうとします。アーカイブ全体を走査しても新しい再配置可能オブジェクトが抽出されないと、アーカイブの再走査は終了します。
-z rescan は、位置独立型のオプションです。リンカーは、コマンド行全体の処理を完了するまで再走査作業を延期し、コマンド行上にあるすべてのアーカイブに対して最後の再走査作業を開始します。-z rescan の再走査作業では、初期化 (.init) セクションまたは最終設定 (.fini) セクションを含むオブジェクトが誤って処理され、それらのセクションのコードが動作しないことがあります。このため、-z rescan ではなく、-z rescan-now を使用することを推奨します。
アーカイブ再走査グループを定義します。これは位置構成で、終端区切りオプションが検出されるとリンカーによってただちに処理されます。グループ区切りオプション内で見つかったアーカイブはグループとして再処理され、シンボル参照を解決する追加のアーカイブメンバーを見つけ出そうとします。アーカイブ全体を走査しても新しい再配置可能オブジェクトが抽出されないと、アーカイブの再走査は終了します。アーカイブ再走査グループを入れ子にすることはできません。
特定のクラスのセクションがすべての入力オブジェクトから削除されるため、これらのセクションは出力ファイルに追加されなくなります。このオプションを使用すると、出力ファイルから省略できるセクションに対してきめ細かな制御ができます。
後述の削除クラスは、割り当て不可のセクションのみに適用されます。
各クラスのトークンを '!' の前に追加して、そのクラスの削除が禁止されていることを示すことができます。この定義は、nonalloc クラスと組み合わせる場合に役立ちます。たとえば、'-z strip-class=nonalloc,!comment' を使用すると、コメントセクションを除くすべての割り当て不可のセクションが削除されます。
次のクラスのセクションを定義できます。
割り当て不可のセクションをすべて削除します。これらのセクションは、SHF_ALLOC セクションフラグを含んでいないとものとして識別されます。このクラスはほかの多くのクラスをカプセル化することができ、ほとんどの場合、不要なセクションを削除するにはこれだけで十分です。ただし、セクションのシンボルクラスはこのクラスでは取得できません。
すべての注釈セクションを削除します。これらのセクションは、SHT_SUNW_ANNOTATE セクションタイプを指定することで識別します。
すべてのコメントセクションを削除します。これらのセクションは、.comment セクション名を指定することで識別します。あるいは、mcs(1) コマンドがコメントセクションを操作するためによく使用されます。
デバッグデータを含めるためによく使用されるセクションを削除します。これらのセクションは、.compcom, .line, .stab*、または .debug* セクション名を指定することで識別します。また、これらのセクションは、SHT_SUNW_DEBUG* セクションタイプを指定することで識別します。
実行可能セクションをすべて削除します。これらのセクションは、SHF_EXCLUDE セクションフラグを指定することで識別します。このクラスは、再配置可能オブジェクトを作成する場合に役立ちます。デフォルトでは、このようなセクションは、動的実行可能ファイルまたは共有オブジェクトの作成時には自動的に除外され、再配置可能オブジェクトの作成時には保持されます。
ノートセクションを削除します。これらのセクションは、SHT_NOTE セクションタイプを指定することで識別します。
出力ファイルが再配置可能オブジェクトでない場合に、割り当て不可のシンボルテーブルセクションと文字列テーブルセクションをすべて削除します。これらのセクションは、SHT_SYMTAB セクションタイプを指定することで識別します。関連する文字列テーブルもすべて削除されます。
スタブ共有オブジェクトを生成します。スタブオブジェクトは共有オブジェクトで、mapfiles からすべて作成されます。また、コードやデータを持ちませんが、本物のオブジェクト同じリンクインタフェースを提供します。スタブオブジェクトは、実行時には使用できません。ただし、スタブオブジェクトに対してアプリケーションを作成できます。その場合、スタブオブジェクトは、実行時に使用される本物のオブジェクトの名前を提供し、実行時に本物のオブジェクトを使用します。
スタブオブジェクトは共有オブジェクト用に対してのみ作成でき、エクスポートされる大域シンボルを定義する mapfile を提供する必要があります。そのため、-G および -M オプションが、-z stub の使用時に必要となります。スタブオブジェクトの作成時には、リンカーはコマンド行で指定されているオブジェクトとライブラリファイルをすべて無視するため、スタブを作成するためにこれらのファイルが存在している必要はありません。コンパイル手順が省略でき、リンカーの作業が比較的少ないため、スタブオブジェクトはすぐに作成できます。
「Stub Objects」 in 『Linker and Libraries Guide』を参照してください。
オブジェクトの機能を定義する再配置可能オブジェクトを、シンボルの機能を定義する再配置可能オブジェクトに変換します。『リンカーとライブラリ』の「オブジェクト機能のシンボル機能への変換」を参照してください。
出力オブジェクトの機械タイプを指定します。サポートされるターゲットは、SPARC と x86 です。-64 オプションも存在していて、対応する 64 ビット機械タイプが使用されている場合を除き、指定されたターゲット用の 32 ビット機械タイプが使用されます。デフォルトでは、生成されるオブジェクトの機械タイプは、コマンド行から処理される最初の ELF オブジェクトによって決まります。オブジェクトを指定していない場合、機械タイプは、コマンド行から処理される最初のアーカイブ内で検出された最初のオブジェクトによって決まります。オブジェクトもアーカイブもない場合、リンカーはネイティブマシンを仮定します。このオプションは、mapfile からの入力のみで ld を使用してオブジェクトを直接作成するときに便利です。 (-M の説明を参照)。また、最初のオブジェクトが目的の機械タイプのオブジェクトではない、異なる機械タイプのオブジェクトを含むアーカイブからすべてをリンクするというごくまれな場合にも便利です。
動的モード専用です。書き込み不可の割り当て可能セクションに対する再配置があると、強制的に致命的エラーを出力します。歴史的理由から、この動作は、実行可能オブジェクトまたは共有オブジェクトを作成するときのデフォルトではありません。ただし、作成される動的オブジェクトのテキスト部分を実行中の複数のプロセス間で共有可能にするため、このオプションを使用することをお勧めします。オブジェクトをメモリーに読み込むときの再配置オーバーヘッドが最低限に抑えられることを共有テキストセグメントは保証します。『リンカーとライブラリ』の「位置独立のコード」を参照してください。
動的モード専用です。書き込み不可の割り当て可能セクションをはじめとするすべての割り当て可能セクションに対して、再配置を許可します。共有オブジェクト作成時のデフォルトの設定です。
動的モード専用です。書き込み不可の割り当て可能セクションに対する再配置があると、警告を出力します。実行可能オブジェクト作成時のデフォルトの設定です。
このオプションはリンクエディット時、警告診断を追加します。現在、このオプションによって次の警告が有効になります。
再配置の置き換えの疑わしい使用。
共有オブジェクト作成時の静的 TLS 再配置の制限された使用。
シンボルの可視性の不一致。
将来、このオプションは、デフォルトで生成される詳細な診断を提供するように拡張される予定です。
ソースコードを変更しなくてもラッパーコードを出力オブジェクトにリンクできるようにするため、symbol への未定義の参照の名前を変更します。-z wrap が指定されている場合、symbol への未定義の参照はすべて __wrap_symbol 参照に変更され、__real_symbol への参照はすべて symbol 参照に変更されます。ユーザーは、__wrap_ symbol 関数を含むオブジェクトを提供するとものと想定されています。ラッパー関数では、ラップされる実際の関数を参照するために、__real_symbol を呼び出すことができます。
次に、malloc(3C) 関数のラッパーの例を示します。
void * __wrap_malloc(size_t c) { (void) printf("malloc called with %zu\n", c); return (__real_malloc(c)); }
すべてのオブジェクトをコンパイルするために -z wrap=malloc を使用してほかのコードをこのファイルとリンクする場合、malloc へのすべての呼び出しは __wrap_malloc 関数を代わりに呼び出します。__real_malloc への呼び出しは、本物の malloc 関数を呼び出します。
本物の関数とラップされた関数は別々のソースファイルで保持するようにしてください。そうしないと、コンパイラまたはアセンブラが呼び出しの解決をリンカーに任せずに自分で行うため、ラップの発生が妨げられることがあります。
代替リンカーパス名。ld が実行され、この代替リンカーに制御が渡されます。この環境変数により、さまざまなコンパイルドライバから呼び出されるデフォルトのリンカーを上書きする汎用的な手段が提供されます。-z altexec64 オプションを参照してください。
-l オプションで指定されたライブラリを検索するディレクトリのリストを指定します。複数のディレクトリを指定する場合は、ディレクトリとディレクトリの間をコロンで区切ります。2 つのディレクトリをセミコロンで区切る方式がもっとも一般的です。
dirlist1;dirlist2
次のように ld の呼び出し時に -L が複数回指定されている場合、
ld ... -Lpath1 ... -Lpathn ...
検索の順番は、次のようになります。
dirlist1 path1 ... pathn dirlist2 LIBPATH
ディレクトリリストにセミコロンが含まれていない場合、dirlist2 と解釈されます。
LD_LIBRARY_PATH 環境変数も、動的な依存関係を検索する実行時リンカーに影響を及ぼします。
この環境変数には、_32 または _64 という接尾辞を指定できます。この接尾辞を追加することで、LD_LIBRARY_PATH 環境変数は 32 ビットのプロセスまたは 64 ビットのプロセス専用になり、接尾辞のない LD_LIBRARY_PATH 環境変数が有効な場合でも、優先的に使用されます。
64 ビットのリンカーが自動的には実行されないようにします。デフォルトでは、最初の再配置可能オブジェクトの ELF クラスが 64 ビットオブジェクトである場合は、自動的に 64 ビット版のリンカーが起動されます。32 ビット版のリンカーが作成できる 64 ビットイメージにはいくつかの制限がありますが、リンク編集の中には、32 ビットのリンカーを使用した方が速いものも存在します。
ld のデフォルトのオプションセットです。LD_OPTIONS の値は、コマンド行で ld の起動コマンドの直後に指定されたものと解釈されます。つまり、次のように指定した場合と同じ結果になります。
ld $LD_OPTIONS ... other-arguments ...
リンカーに実行パスを指定する代替手段です (-R オプションを参照)。LD_RUN_PATH と -R オプションを両方指定すると、-R オプションが優先されます。
リンカーによって読み込まれ、リンクプロセスの情報を与えられた共有オブジェクトを、コロンで区切った形式で一覧します。この環境変数には、_32 または _64 という接尾辞を指定できます。こうすることで、この環境変数を、ld の 32 ビットクラスまたは 64 ビットクラスのどちらか専用にできます。この指定は、現在有効になっている接尾辞の付いていない環境変数の指定より優先されます。-S オプションを参照してください。
文字列 LD_ で始まる環境変数名は、ld と ld.so.1(1) の拡張用として予約されています。
共有オブジェクトライブラリ。
アーカイブライブラリ
デフォルトの出力ファイル。
32 ビットライブラリの場合、デフォルトの検索パスは、順番に、/lib、そして /usr/lib です。64 ビットライブラリの場合、デフォルトの検索パスは、順番に、/lib/64、そして /usr/lib/64 です。
リンク編集時に使用可能な複数の mapfiles を含むディレクトリです。これらの mapfiles により、メモリーレイアウトの定義、bss の整列、および実行不可能なスタックの定義など、さまざまな機能が提供されます。
属性についての詳細は、attributes(5) を参照してください。
|
as(1), crle(1), gprof(1), ld.so.1(1), ldd(1), mcs(1), pvs(1), strip(1), exec(2), stat(2), dlopen(3C), dldump(3C), elf(3ELF), ar.h(3HEAD), a.out(4), attributes(5)
ld のデフォルト動作を指定するためのオプションは、歴史的理由から残されています。しかし、動的オブジェクトが広く使用されている現在のプログラミング環境では、従来とは異なるデフォルトの方が有効である場合が少なくありません。ただし、従来のデフォルトは、既存のプログラム開発環境との互換性を維持するために残しておく必要があります。このマニュアルでは従来のデフォルトは、可能なかぎり、そのことを明示する方法で記述します。現在の推奨オプションについては、『リンカーとライブラリ』の第 7 章「リンカーのクイックリファレンス」を参照してください。
ld により作成されるファイルがすでに存在する場合、そのファイルは、すべての入力ファイルが処理されたあとにリンクが解除され、指定された名前で新しいファイルが作成されます。これにより、ld は、古いファイルの内容にアクセスしている既存のプロセスが実行を継続できるようにする一方で、同時にそのファイルの新しいバージョンを作成できます。古いファイルにほかにリンクが含まれていない場合は、そのファイルを参照している最後のプロセスが終了すると、その削除されたファイルのディスク領域が解放されます。
Solaris 11 では、作成するファイルがすでに存在している場合の ld の動作が変更されました。古いバージョンでは、既存のファイルはその場所で書き換えられるため、そのファイルを使用している動作中のプロセスが壊れてしまう可能性がありました。この変更は、ファイルシステム内にハードリンクが複数ある出力ファイルに影響します。以前は、すべてのリンクがそのまま維持され、新しいファイルの内容にもアクセスしていました。新しい ld の新しい動作はこのようなリンクを「解除」するため、指定された出力ファイル名だけが新しいファイルを参照することになります。それ以外のリンクはすべて、古いファイルを引き続き参照します。一貫性のある動作を保証するには、リンカーの出力ファイルへの複数のハードリンクに依存するアプリケーションで、そのほかのファイル名を明示的に削除し、リンクし直す必要があります。