マニュアルページセク ション 1: ユーザーコマンド

印刷ビューの終了

更新: 2014 年 7 月
 
 

ld(1)

名前

ld - オブジェクトファイル用リンカー

形式

ld [-32 | -64] [-B direct | nodirect] [-B dynamic | static]
[-B eliminate[=mode] | local[=mode]] [-B reduce] [-c name]
[-C] [-D [!]token1,[!]token2,...] [-e epsym
]
[-f name | -F name] [-G] [-h name] [
-i] [-l x] [-L path]
[-m] [-M mapfile] [-N string] [-o outfile] [
-p auditlib]
[-P auditlib] [-Q y | n] [-r] [-R path] [-s]
[-S supportlib] [-u symname] [-V]
[-z allextract | defaultextract | weakextract ]
[-z ancillary[=outfile]] [-z aslr[=mode]]
[-z assert-deflib[=libname]] [-z compress-sections[=cmp-type]]
[-z deferred | nodeferred] [-z defs | nodefs]
[-z direct | nodirect] [-z discard-unused=item1,item2,...]
[-z endfiltee] [-z fatal-warnings | nofatal-warnings]
[-z finiarray=function] [-z globalaudit]
[-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 origin] [-z parent=object] [-z preinitarray=function]
[-z rescan-now] [-z rescan-start ... -z rescan-end]
[-z strip-class=[!]class1,[!]class2,...] [-z stub]
[-z symbolcap] [-z target=sparc | x86]
[-z text | textwarn | textoff] [-z type=object-type]
[-z verbose] [-z wrap=symbol]
filename ...

説明

リンカー ld は、シンボル定義へのシンボル参照を解決し、再配置を実行することによって再配置可能オブジェクトファイルを結合します。いずれの場合も、リンカーのデフォルトの出力は a.out ファイルとなります。「注意事項」を参照してください。

リンカーには多数のオプションがあります。現代的なプログラミング習慣に関連するオプションは「形式」で定義され、以降のセクションで説明されています。その他のオプションは一般にはあまり使用されず、「セカンダリオプション」セクションで説明されています。

リンカーはさまざまな入力ファイルを受け取りますが、それらは通常、コンパイラやアセンブラ、あるいは以前のリンカー呼び出しによって生成されたものです。リンカーは、これら入力ファイル内のデータを連結および解釈して、出力ファイルを生成します。生成される出力ファイルは次のいずれかの基本タイプになります。

  • 動的実行可能ファイル – 入力再配置可能オブジェクトを連結したもの。実行可能なプロセスを生成するために実行時リンカー ld.so.1(1) の関与が必要となります。動的実行可能ファイルは、通常共有オブジェクトの形で 1 つ以上の依存関係を持っています。

    動的実行可能ファイルは、–z type=exec オプションが使用された場合に作成され、出力ファイルタイプを制御するオプションがほかに指定されていない場合のデフォルトになります。

  • 位置独立実行可能ファイル – 共有オブジェクトの特殊な場合。インタプリタを指定します。位置独立実行可能ファイルは位置独立コードから作成すべきです。位置独立時可能ファイルは、実行時に固定されたアドレス空間を必要とする動的実行可能ファイルと違い、exec(2) によって選択された任意のアドレスにロードできます。

    位置独立実行可能ファイルが作成されるのは、–z type=pie オプションが使用された場合です。

  • 再配置可能オブジェクト – 入力再配置可能オブジェクトを連結したもの。後続のリンク編集フェーズで使用できます。

    再配置可能オブジェクトが作成されるのは、–z type=reloc オプションまたは –r オプションが使用された場合です。

  • 共有オブジェクト – サービスを提供する入力再配置可能オブジェクトを連結したもの。実行時に動的実行可能ファイルにバインドできます。共有オブジェクトは位置独立コードから作成すべきです。また、共有オブジェクトの中にも、ほかの共有オブジェクトに依存する依存関係がある場合もあります。

    共有オブジェクトが作成されるのは、–z type=shared オプションまたは –G オプションが使用された場合です。

リンカーは、動的または静的の 2 つのモードのどちらかで動作します。デフォルトは動的リンク処理モードであり、このモードでは動的実行可能ファイル、共有オブジェクト、および位置独立実行可能ファイルを作成できます。この動的リンク環境では、リンカーと実行時リンカー ld.so.1(1) の作業が密接に結び付けられます。これらのユーティリティーはどちらも、関連テクノロジおよびユーティリティーと合わせてOracle Solaris 11.2 リンカーとライブラリガイド で広範囲にわたり説明されています。

静的リンク処理モードでは、再配置可能オブジェクトを作成できます。Oracle Solaris オペレーティングシステムの最新のバージョンは、静的実行可能ファイルの作成をサポートしていません。Static Executablesを参照してください。このセクションのすべての説明は動的リンク、あるいは –ztype=reloc または –r オプションを指定した静的リンクを前提にしています。

いずれかの引数がライブラリである場合、リンカーはデフォルトでは、コマンド行でそのライブラリが検出された時点でそのライブラリを 1 回だけ検索します。ライブラリとして指定できるのは、共有オブジェクトまたは再配置可能アーカイブのどちらかです。ar(1) を参照してください。

共有オブジェクトは不可分の完全なユニットで、1 つ以上の入力ファイルをリンクすることによって生成されます。リンカーが共有オブジェクトを処理すると、共有オブジェクトの全内容は、その結果作成された出力ファイルイメージの論理的な部分になります。共有オブジェクトが実際に取り込まれるのはプロセスの実行時であるため、リンク処理中に物理的なコピー処理が行われることはありません。この論理的な組み込みは、リンク編集プロセスにとって共有オブジェクト内に定義されたすべてのシンボルエントリが利用可能になることを意味しています。Oracle Solaris 11.2 リンカーとライブラリガイド の第 4 章共有オブジェクトを参照してください。

アーカイブライブラリの場合、リンカーはデフォルトでは、未解決の外部参照を定義しているアーカイブメンバーのみをロードします。リンカーは、アーカイブライブラリのシンボルテーブル内を順番に検索し、アーカイブメンバーで解決可能な外部参照を解決します。この検索は、アーカイブで外部参照を解決できなくなるまで繰り返されます。そのため、同じ外部シンボルを定義する複数のアーカイブメンバーが存在しないかぎり、ライブラリ内のメンバーの順序は機能的に重要ではありません。–z allextract オプションも参照してください。相互依存関係を持つアーカイブライブラリでは、複数のコマンド行定義、またはいずれかの –z rescan オプションの使用が必要になる場合があります。Oracle Solaris 11.2 リンカーとライブラリガイド のアーカイブ処理を参照してください。

このリンカーは SPARC または x86 を対象としたクロスリンカーで、32 ビットオブジェクトまたは 64 ビットオブジェクトにリンクできます。リンカーは、コマンド行の最初の入力再配置可能オブジェクトの ELF クラスおよび機械タイプを使用して、操作するモードを制御します。32 ビットオブジェクトと 64 ビットオブジェクトを混在させることはできません。同様に、1 つの機械タイプのオブジェクトのみが許可されます。–32–64 および –z target オプションと LD_NOEXEC_64 環境変数を参照してください。

静的実行可能ファイル

静的実行可能ファイルは、多くのリリースで作成しないように勧められています。実際、Solaris では、64 ビットのシステムアーカイブライブラリが提供されたことはありません。静的実行可能ファイルは、システムアーカイブライブラリに反して構築されるので、実行可能ファイルにはシステム実装の詳細が含まれます。この自己内包には、多数の欠点があります。

  • この実行可能ファイルは、共有オブジェクトとして提供されるシステムパッチの恩恵を受けることができません。したがって、多くのシステムの改良を利用するには、この実行可能ファイルを再構築する必要があります。

  • 将来のリリースでこの実行可能ファイルを実行できなくなる可能性があります。

  • システム実装の詳細を複製すると、システムのパフォーマンスに悪影響を与えます。

Oracle Solaris 10 から、32 ビットのシステムアーカイブライブラリは提供されなくなりました。これらのライブラリ (特に libc.a) を入手できないため、ドキュメントに記載されていない、変更される可能性のあるシステム詳細にアクセスしないかぎり、静的実行可能ファイルの作成は不可能となりました。ただし、静的リンクオプションを処理するリンカーの機能とアーカイブライブラリの処理に変更はありません。

オプションの処理

通常、リンカーはコマンド行オプションを使って完全に指定されます。ただし、コマンド行処理を強化する目的でさまざまな環境変数が用意されています。これらの変数を使えば、コンパイラオプションと衝突する可能性のあるオプションを指定できます。これらの変数を使えば、スクリプト内やビルド環境内に埋め込まれたコマンド行オプションの上書きまたは設定解除も行えます。

各コマンド行オプションの間に 1 つでも矛盾があると、致命的エラーの状態になります。環境変数から提供されたオプションに関する不整合が検出されると、警告が発行され、最初のオプションが優先されます。

環境やコマンド行からのオプションは、次の順番で解釈されます。

  • LD_OPTIONS 環境変数から。

  • コマンド行から。

  • LD_UNSET 環境変数から。

これら 3 つのコンポーネントから出力オブジェクトのタイプが決まります。次にそのオブジェクトタイプに基づいて LD_{object-type}_UNSET および LD_{object-type}_OPTIONS 環境変数が調査され、構築中のオブジェクトタイプに固有のオプションが削除または追加されます。object-type は、–z type オプションによって定義されるタイプ (大文字) であり、EXECPIERELOCSHARED のいずれかになります。たとえば、出力ファイルのタイプが動的実行可能ファイルであれば、LD_EXEC_OPTIONS のオプションが解釈されます。これらの環境変数は次の順番で処理されます。

  • LD_{object-type}_UNSET 環境変数から。

  • LD_{object-type}_OPTIONS 環境変数から。

この出力オブジェクトタイプと矛盾するコマンド行オプションが含まれていると、致命的エラーの状態になります。環境変数から提供されたオプションで不整合が検出されると、警告が発行され、そのオプションは無視されます。

UNSET 操作時には必ず警告が通知されます。オプション処理のその他のすべての警告を致命的エラー状態に昇格させるには、–z fatal-warnings オプションを設定します。

オプション

以下のオプションがサポートされています。

–32 | –64
–m32 | –m64

32 ビットまたは 64 ビットオブジェクトを作成します。

デフォルトでの生成されるオブジェクトのクラスは、コマンド行から処理される最初の ELF オブジェクトによって決まります。オブジェクトを指定してしない場合、クラスは、コマンド行から処理される最初のアーカイブ内で検出された最初のオブジェクトによって決まります。オブジェクトもアーカイブもない場合、リンカーは 32 ビットオブジェクトを作成します。

–64 オプションは、64 ビットオブジェクトを mapfile からのみ作成する場合に必要です。

–32 または –64 オプションは、32 ビットと 64 ビットのオブジェクトが混在するアーカイブからすべてをリンクするというごくまれな場合にも使用できます。アーカイブの最初のオブジェクトが、作成される必要のあるオブジェクトのクラスではない場合、–32 または –64 オプションを使用してリンカーに指示できます。

–B direct | nodirect

これらのオプションで直接結合を制御します。–B direct は、シンボル参照と、シンボル定義を提供する依存関係との間の関係を記録することによって、直接結合情報を確立します。さらに、直接結合情報は、シンボル参照と、作成されるオブジェクト内の関連付けられた定義の間で確立できます。実行時リンカーは、デフォルトのシンボル検索を行わずに、この情報を使用して、関連付けられたオブジェクト中のシンボルを直接検索します。

直接結合情報は、リンク編集で指定される依存関係に対してのみ確立されます。したがって、–z defs オプションも追加すべきです。直接結合環境でシンボルに対して割り込もうとするオブジェクトは、–z interpose オプションにより、自身をインターポーザーとして識別するべきです。–B direct を使用すると、–z lazyload もすべての依存関係に対して有効になります。

–B nodirect オプションは、作成されているオブジェクトによって提供されるインタフェースとの直接結合をすべて回避させます。–z direct オプションを指定すると、作成されているオブジェクトは外部インタフェースと直接結合を続けられます。Oracle Solaris 11.2 リンカーとライブラリガイド の第 6 章直接結合を参照してください。

–B dynamic | static

これらのオプションによって、ライブラリの取り込みが管理されます。–B dynamic は、–l オプションのライブラリ検索が共有オブジェクトとアーカイブライブラリ名に展開されるように許可します。このオプションはデフォルトであり、動的モードでのみ有効です。–B static は、–l オプションのライブラリ検索がアーカイブライブラリ名にのみ展開されるように制限します。これらのオプションは、トグルとしてコマンド行で何回でも指定できます。–B static オプションが指定されている場合は、–B dynamic が見つかるまで、共有オブジェクトは受け入れられません。–l オプションを参照してください。

–B eliminate[=mode] | local[=mode]

デフォルトではグローバル結合になるシンボルがすべて、シンボルテーブルから削除されるか、またはローカルな可視性に削減されます。STV_DEFAULT 可視性を持つグローバルシンボルは、リンカーによって、より制限的な可視性に削減される場合があります。その他のすべての STV_ 可視性を持つグローバルシンボルは、明示的な可視性を持っているとみなされます。明示的な可視性はリンカーによって尊重され、変更することはできません。Oracle Solaris 11.2 リンカーとライブラリガイド のシンボルの可視性を参照してください。シンボルの可視性は、コンパイラ指令を使用して、あるいはバージョンまたはインタフェース定義を定義する mapfiles を使用して明示的に定義できます。

Mapfile バージョンおよびインタフェース定義には、auto-elimination または auto-reduction 指令を含めることができます。Oracle Solaris 11.2 リンカーとライブラリガイド の追加シンボルの定義を参照してください。これらの指令を指定すると、mapfile で明示的に定義されていないシンボル、または明示的な可視性を定義していないシンボルがそれぞれ、削除されるか、またはローカルに削減されます。以降の段落で説明されているように、シンボルの削除または削減は、すべての明示的なシンボル定義に加えて、生成されるオブジェクトのタイプによっても影響を受けます。–B eliminate オプションは、mapfile auto-elimination 指令と同じシンボル削除を要求します。–B local オプションは、mapfile auto-reduction 指令と同じシンボル削減を要求します。

どちらのオプションも、削除または削減されるグローバルシンボルの選択を制御するために、external または noexternal のモードで修飾できます。リンカーはデフォルトで、生成されるオブジェクトのタイプに適したモード (実行可能ファイルの場合は external、共有オブジェクトの場合は noexternal) になるため、この微調整は通常は必要ありません。

動的オブジェクトを構築するときは、一部のシンボルを確実にグローバルのままにして、外部の依存関係から参照可能にすることが必要になる場合があります。これは特に、動的実行可能ファイルの場合に当てはまります。実行可能ファイルを構築するときは、実行時のプロセス初期化を可能にするコンパイル環境によって再配置可能オブジェクトが提供されます。これらの再配置可能オブジェクトには、システムの依存関係から参照されるグローバルシンボルを含めることができます。これらのシンボルは、実行時の実行を損なわないように、シンボルの自動削除または自動削減手法には関係なくグローバルのままになるようにするべきです。

modeexternal として定義すると、外部の依存関係からのいずれかのシンボル参照が、構築されるオブジェクト内のシンボル定義に結合される可能性があるかどうかを判定するために、外部のすべての依存関係が分析されます。このような結合を満たすグローバルシンボルが削除されたり、ローカルに削減されたりすることはありません。動的実行可能ファイルを生成する場合は、このモードがデフォルトです。

modenoexternal として定義すると、外部のすべての依存関係の分析が回避され、mapfile で明示的に定義されていない、または明示的な可視性を定義していないすべてのシンボルが削減されます。共有オブジェクトを生成する場合は、このモードがデフォルトです。

–B reduce オプションも参照してください。

–B reduce

再配置可能オブジェクトを生成している場合は、いずれかのシンボル可視性属性によって、あるいはバージョンまたはインタフェース定義を定義する mapfiles を使用して定義されたシンボル情報が削減されます。デフォルトでは、再配置可能オブジェクトが生成される場合、可視性属性、バージョン定義、またはインタフェース定義は出力イメージにのみ記録されます。動的実行可能ファイルまたは共有オブジェクトを作成する場合は、可視性属性、あるいは mapfile バージョンまたはインタフェース定義は常に、すべてのシンボル情報に適用されます。

–c name

実行時に使用する構成ファイル name を記録します。構成ファイルは、デフォルト検索パスの変更やディレクトリキャッシュの提供に使用されるほか、代替オブジェクトの依存関係を提供します。crle(1) を参照してください。このオプションを使用できるのは、動的実行可能ファイルまたは位置独立実行可能ファイルを作成する場合だけです。

–C

診断メッセージに表示される C++ シンボル名を復号化します。

–D [!]token1,[!]token2,...

token に指定したデバッグ情報を標準エラーに出力します。help は、使用可能なトークンをすべて指定した場合と同じ意味を持つ特殊なトークンです。Oracle Solaris 11.2 リンカーとライブラリガイド のデバッグ支援を参照してください。

–e epsym
–-entry epsym

出力ファイルのエントリポイントのアドレスとして、シンボル epsym に設定します。

–f name
–-auxiliary name

共有オブジェクトを構築するときにのみ使用されます。このオプションを指定すると、共有オブジェクトのシンボルテーブルが、name に指定した共有オブジェクトのシンボルテーブルで、補助フィルタとして使用されるようになります。このオプションは複数回指定できますが、本オプションは –F と同時に指定することはできません。Oracle Solaris 11.2 リンカーとライブラリガイド の補助フィルタの生成を参照してください。

–F name
–-filter name

共有オブジェクトを構築するときにのみ使用されます。このオプションを指定すると、共有オブジェクトのシンボルテーブルが、name に指定した共有オブジェクトのシンボルテーブルで、フィルタとして使用されるようになります。このオプションは複数回指定できますが、本オプションは –f と同時に指定することはできません。Oracle Solaris 11.2 リンカーとライブラリガイド の標準フィルタの生成を参照してください。

–G
–shared

動的モード専用です。共有オブジェクトを生成します。未定義のシンボルも許容されます。–ztype=shared オプションも参照してください。Oracle Solaris 11.2 リンカーとライブラリガイド の第 4 章共有オブジェクトを参照してください。

–h name
–-soname name

動的モード専用です。共有オブジェクトの作成時、name をオブジェクトの動的セクションに記録します。ファイルシステムにおけるオブジェクトの名前ではなく、name がこのオブジェクトにリンクされた任意の動的オブジェクトに記録されます。このため、実行時リンカーは、実行時に検索する共有オブジェクト名として name を使用します。Oracle Solaris 11.2 リンカーとライブラリガイド の共有オブジェクト名の記録を参照してください。

–i

LD_LIBRARY_PATH の設定を無視します。LD_LIBRARY_PATH の設定がリンク処理の妨げになる場合は、このオプションを使用して、実行時のライブラリ検索への影響を防ぎます。

–l x
–-library x

ライブラリ libx.so (共有オブジェクトの慣例的な名前) または libx.a (アーカイブライブラリの慣例的な名前) を検索します。動的モードでは、–B static オプションが有効になっている場合を除けば、ライブラリ検索パスに指定された各ディレクトリ内で、libx.so ファイルまたは libx.a ファイルが検索されます。いずれかを含む最初のディレクトリでディレクトリ検索は停止します。–lx が、libx.solibx.a という形式の名前を持つ 2 つのファイルに展開される場合、リンカーは .so で終わるファイルを選択します。libx.so が見つからない場合は libx.a が選択されます。静的モードの場合や –B static オプションが有効になっている場合には、リンカーは .a で終わるファイルのみを選択します。リンカーはライブラリが検出された時点でライブラリの検索を行うので、–l の位置が重要になります。Oracle Solaris 11.2 リンカーとライブラリガイド の追加ライブラリとのリンクを参照してください。

–L path
–-library-path path

ライブラリ検索ディレクトリに path を追加します。リンカーはライブラリの検索を、まず –L オプションで指定されたすべてのディレクトリ内で行い、次に標準ディレクトリ内で行います。このオプションは、同一コマンド行の –l オプションより前に指定した場合のみ有効です。Oracle Solaris 11.2 リンカーとライブラリガイド のリンカーが検索するディレクトリを参照してください。

環境変数 LD_LIBRARY_PATH はライブラリ検索パスの補完に使用できますが、実行時環境によっても解釈されるため、–L オプションを使用することをお勧めします。「環境変数」の「LD_LIBRARY_PATH」を参照してください。

–m

メモリーマップ (入出力セクションのリスト) と、致命的ではない多重定義シンボルを生成し、標準出力に出力します。

–M mapfile

マップファイル mapfile を、リンカーへの指令が記述されているテキストファイルとして読み取ります。このオプションは複数回指定できます。mapfile がディレクトリの場合、stat(2) で定義されるように、そのディレクトリ内のすべての通常ファイルが処理対象になります。Oracle Solaris 11.2 リンカーとライブラリガイド の第 8 章mapfileを参照してください。マップファイルの例は、/usr/lib/ld にあります。「ファイル」を参照してください。

–N string

このオプションを指定すると、作成されるオブジェクトの .dynamic セクションに DT_NEEDED エントリが追加されます。DT_NEEDED 文字列の値はコマンド行で指定した string です。このオプションは位置に依存します。このため、DT_NEEDED .dynamic エントリはリンク行にあるほかの動的な依存オブジェクトに対して相対的になります。デバイスドライバの再配置可能オブジェクト間の依存関係を指定するときに、このオプションをオプション –dy および –r と組み合わせて使用すると便利です。

–o outfile
–-output outfile

outfile という名前の出力オブジェクトファイルを生成します。デフォルトのオブジェクトファイル名は、a.out です。

–p auditlib

監査ライブラリ auditlib を識別します。このライブラリは、作成されたオブジェクトの実行時に行われる監査に使用されます。自分自身の監査を行うような共有オブジェクトと依存関係にあるオブジェクトは、この共有オブジェクトの性質を継承し、自分自身の監査を行います (–P オプションを参照)。Oracle Solaris 11.2 リンカーとライブラリガイド の実行時リンカーの監査インタフェースを参照してください。

–P auditlib

監査ライブラリ auditlib を識別します。このライブラリは、作成されたオブジェクトの実行時に行われる依存関係の監査に使用されます。この監査は、このオブジェクトと依存関係にあり、監査を行う必要があるオブジェクトから継承される場合もあります–p オプションと –z globalaudit オプションを参照してください。Oracle Solaris 11.2 リンカーとライブラリガイド の実行時リンカーの監査インタフェースを参照してください。

–Q y | n

–Q y を指定すると、ident 文字列が、出力ファイルの .comment セクションに追加されます。この文字列は、ファイル作成に使用されたリンカーのバージョンを識別します。このため、リンカーの –ztype=reloc または –r オプションを使用する場合のように、リンク処理のステップが複数存在した場合には、リンカーの ident が複数追加されます。この識別は、cc コマンドのデフォルト時のアクションと同じです。–Q n は、バージョンの識別を抑止します。.comment セクションは mcs(1) ユーティリティーで操作できます。

–r
–-relocatable

複数の再配置可能オブジェクトを組み合わせて 1 つの再配置可能オブジェクトファイルを生成します。リンカーは、未解決の参照に関する警告を発しません。このオプションは、–a と同時には使用できません。–ztype=reloc オプションも参照してください。

–R path
–rpath path

複数のディレクトリをコロンで区切って指定します。このリストは、実行時リンカーにライブラリ検索ディレクトリを指定する際に使用されます。NULL 以外の文字列は、出力オブジェクトファイルに記録され、実行時リンカーに渡されます。このオプションを複数回指定する場合と、コロンで区切って path を指定する場合の結果は同じになります。Oracle Solaris 11.2 リンカーとライブラリガイド の実行時リンカーが検索するディレクトリを参照してください。

関連オブジェクト内で runpath を使用する方が、LD_LIBRARY_PATH 環境変数を使用するなどの方法でグローバル検索パスを設定するよりも適切です。オブジェクトの依存関係を探すために必要な runpaths のみ記録するようにしてください。ldd(1)–U オプションとともに使用すると、動的オブジェクト内の未使用の runpaths を探すこともできます。

また、runpath で提供されるさまざまなトークンを使用すると、システムの機能やオブジェクトの位置を柔軟に識別できます。Oracle Solaris 11.2 リンカーとライブラリガイド の第 10 章動的ストリングトークンによる依存関係の確立を参照してください。$ORIGIN トークンは、動的オブジェクトをファイルシステム内の別の場所に再配置できるようにする場合に特に役立ちます。

–s
–-strip-all

出力ファイルからシンボル情報をすべて取り除きます。このオプションは、–z strip-class オプションを debugsymbol クラス識別子とともに使用することと同等です。–z redlocsym および –z noldynsym オプションも参照してください。

–S supportlib

リンカーによって共有オブジェクト supportlib がロードされ、リンクプロセスに関する情報が提供されます。–S オプションを使用して定義された共有オブジェクトは、SGS_SUPPORT 環境変数を使用して提供することもできます。Oracle Solaris 11.2 リンカーとライブラリガイド のリンカーのサポートインタフェースを参照してください。

–u symname
–-undefined symname

symname を、未定義シンボルとしてシンボルテーブルに入力します。このオプションは、すべてのルーチンをアーカイブライブラリから読み込む場合に便利です。これは、最初のルーチンを読み込むために、未解決の参照が必要になるからです。コマンド行内でのこのオプションの位置は重要な意味を持ち、シンボルを定義するライブラリより前に配置する必要があります。Oracle Solaris 11.2 リンカーとライブラリガイド の-u オプションを使用した追加シンボルの定義を参照してください。

–V
–-version

使用するリンカーのバージョン情報を示すメッセージを出力します。

–z allextract | defaultextract | weakextract
–-whole-archive | –-no-whole-archive

後続のすべてのアーカイブのオブジェクトの抽出条件を変更します。デフォルトでは、アーカイブメンバーは、未定義の参照を解決し、データ定義による仮の定義を行うために抽出されます。弱いシンボル参照は抽出を行いません。–z allextract または –-whole-archive オプションでは、すべてのアーカイブメンバーがアーカイブから抽出されます。–z weakextract を指定すると、弱い参照によってアーカイブの抽出が行われます。–z defaultextract または –-no-whole-archive オプションを指定すると、すでに指定されている抽出オプションを無効にし、デフォルトの状態に戻すことができます。Oracle Solaris 11.2 リンカーとライブラリガイド のアーカイブ処理を参照してください。

–z ancillary[=outfile]

通常は出力オブジェクトに追加される割り当て不可能なすべてのセクションを受信する補助的な出力ファイルを指定します。割り当て不可能なセクションは実行時には必要なく、主にデバッガやその他の可観測性ツールで使用されます。outfile が存在する場合は、指定された名前を使用して補助的なファイルが作成されます。outfile が存在しない場合、補助的なファイルにはプライマリ出力ファイルと同じ名前が与えられ、.anc 接尾辞が追加されます。Oracle Solaris 11.2 リンカーとライブラリガイド の第 2 章リンカーを参照してください。

–z ancillary オプションは、–z stub オプションと組み合わせて使用されている場合、何も出力せずに無視されます。また、outfile なしで指定され、–o オプションで指定された出力ファイルが /dev/null などのデバイス特殊ファイルである場合の –z ancillary オプションも無視されます。

–z aslr[=mode]

実行可能ファイルのアドレス空間配置のランダム化 (ASLR) 動作を指定します。モード値は、enable または disable に設定できます。モードを省略した場合、ASLR は有効になります。このオプションを使用できるのは、動的実行可能ファイルまたは位置独立実行可能ファイルを作成する場合だけです。

–z assert-deflib[=libname]

–l コマンド行オプションで指定したライブラリに対して、リンカーで指定したデフォルト検索パスの検査によって検出される警告メッセージを有効にします。libname の値を指定するとデフォルトのライブラリ警告機能が有効になり、指定したライブラリが、警告を出力しないライブラリの一覧に追加されます。複数の –z assert-deflib オプションを指定すると、警告を出力してはいけないライブラリを複数指定できます。

libname の値は、リンカーで検出されたときのように、パスコンポーネントのないライブラリファイル名にする必要があります。たとえば、次のように指定すると、デフォルトのライブラリ警告が有効になり、標準 C ライブラリが除外されます。

$ ld ... -z assert-deflib=libc.so ...

–z assert-deflib は、同名のオブジェクトが複数存在し、使用ライブラリを厳密に管理する必要がある構築環境を主に対象とした特殊なオプションです。このオプションは、一般的な用途向けではありません。

–z compress-sections[=cmp-type]
–-compress-debug-sections cmp-type

注釈およびデバッグ出力セクションの圧縮を有効にします。cmp-type では次の値が認識されます。

none

圧縮は行われません。これは、–z compress-sections オプションを指定しないのと同等です。

zlib

ZLIB 圧縮を使って候補セクションを圧縮します。結果の出力セクションでは、圧縮を使用していることがわかるように、SHF_COMPRESSED セクションフラグが設定されます。

zlib-gnu

ZLIB 圧縮を使ってすべての候補セクションを圧縮します (GNU セクション圧縮形式が使用される)。この形式の場合、候補セクションの名前は .debug で始まっている必要があります。結果となるセクションの名前は、圧縮を使用していることがわかるように、.zdebug で始まる名前に変更されます。

cmp-type を省略した場合は zlib スタイルが使用されます。圧縮すると元の非圧縮データよりサイズが大きくなるようなセクションでは、リンカーは何の警告もなしに圧縮をスキップします。

あるセクションが圧縮の候補となるためには、そのセクションは割り当て不可能であり、かつ次のいずれかのクラスに属している必要があります。

annotate

注釈セクションは、メモリーアクセスツールや、カバレージ関連のツールによって使用される情報を提供します。これらのセクションは、SHT_SUNW_ANNOTATE セクションタイプを指定することで識別します。

debug

デバッグセクションは、.compcom.line.stab*.debug*、または .zdebug* セクション名を指定することで識別します。また、これらのセクションは、SHT_PROGBITS または SHT_SUNW_DEBUG* セクションタイプを指定することでも識別されます。

zlib-gnu 圧縮タイプは、.debug で始まる名前を持つセクションに制限されます。zlib-gnu を使用する場合、そうでなければ圧縮の候補となったであろうセクションは圧縮されません。ベースとなる ZLIB 圧縮は zlib スタイルと zlib-gnu スタイルとで同じなので、どちらの形式でも特定の入力セクションの圧縮量は同じになります。2 つのスタイルの違いは、候補セクションの選択、圧縮ヘッダーの形式、および圧縮セクションの識別方法、にあります。Oracle Solaris 11.2 リンカーとライブラリガイド の第 2 章リンカーを参照してください。zlib-gnu スタイルを使用する必要性が特にないかぎり、より一般的なデフォルトの zlib スタイルをお勧めします。

–z deferred | nodeferred

動的依存関係への遅延の印の付加を有効または無効にします。遅延の印を付けられた動的依存関係にはレイジー読み込み可能の印も付けられ、初期プロセスの起動では読み込まれません。遅延依存関係の読み込みは、そのレイジー参照への結合がはじめて行われたときに行われます。基本的なレイジーロード可能な依存関係とは異なり、遅延依存関係は LD_BIND_NOW プロセスの一部として、または RTLD_NOW フラグが設定された dlopen(3C) を介して処理されることはありません。Oracle Solaris 11.2 リンカーとライブラリガイド の機能のテストを参照してください。

遅延依存関係を dlsym(3C) および RTLD_PROBE ハンドルとともに使用すると、自然なコーディングスタイルを使用して柔軟なメカニズムで機能テストを実行できます。

–z defs | nodefs
–-no-undefined

–z defs オプションと –-no-undefined オプションは、リンク終了時に未定義のシンボルがあると、致命的エラーを強制的に出力します。これは、実行可能オブジェクトを作成する場合のデフォルトの設定ですが、歴史的経緯から、共有オブジェクトを作成する場合にはデフォルトではありません。共有オブジェクト作成時に、そのオブジェクトが自己完結していることを確認できるため、–z defs オプションを使用することをお勧めします。自己完結しているオブジェクトでは、シンボル参照がそのオブジェクト内またはそのオブジェクトの依存関係の中で解決されています。

–z nodefs オプションは、未定義のシンボルを許可します。歴史的経緯から、共有オブジェクトを作成する場合には、この動作がデフォルトになっています。このオプションを実行可能ファイルに対して指定した場合の、未定義のシンボルに対する参照の動作は不確定です。–z nodefs オプションを使用することは、お勧めしません。

–z direct | nodirect

コマンド行であとに続くすべての依存関係への直接結合を有効または無効にします。このオプションにより、対応するグローバルなオプション –B direct よりも直接結合を効率よく制御できます。–z direct オプションは、次の点で –B direct オプションとも異なります。直接結合の情報は、シンボル参照と作成されたオブジェクト内で関連付けられた定義の間では確立されません。レイジー読み込みは無効です。

–z discard-unused=item1,item2,...

デフォルトでは、リンカーは、未使用の空のセクションを破棄します。その他のカテゴリの入力素材は、リンク編集中に、未使用であると判定できます。–z discard-unused オプションを使用すると、このような項目の自動削除が可能になります。次の item トークンが認識されます。

セクション

未使用のセクションは、リンク編集から作成された出力ファイルから破棄されます。

ファイル

未使用の再配置可能オブジェクトファイルは、リンク編集から作成された出力ファイルから破棄されます。

入力の再配置可能オブジェクトファイルは、その再配置可能オブジェクトによって提供されるすべての割り当て可能セクションが未使用である場合に、未使用であると判定されます。–z guidance オプションの「必須でない再配置可能オブジェクトファイル」の説明も参照してください。

依存関係

未使用の、明示的な、共有オブジェクトの依存関係は、リンク編集から作成された出力ファイル内に記録されません。

明示的な依存関係とは、パス名を使用して、またはより一般には –l オプションを使用してコマンド行で定義された依存関係のことです。明示的な依存関係がほかのオブジェクトに依存する場合があり、これを暗黙の依存関係と呼びます。明示的な依存関係は、2 つの条件が満たされた場合に、未使用であると判定されます。

  • この依存関係によって提供されるグローバルシンボルが、構築されるオブジェクトから参照されていない。

  • この依存関係が、どの暗黙の依存関係の要件も補償していない。

–z guidance オプションの「必須でない、または補償している依存関係」の説明も参照してください。

none

未使用の処理 (未使用の空のセクションを削除するデフォルトのアクションを含む) をすべて無効にします。

Oracle Solaris 11.2 リンカーとライブラリガイド の使用されない対象物の削除も参照してください。

–z endfiltee

フィルタ処理の対象オブジェクトに印をつけます。フィルタによる検索処理は、このオブジェクトを検出した時点で終了します。Oracle Solaris 11.2 リンカーとライブラリガイド の「フィルティー」検索の縮小を参照してください。

–z fatal-warnings | nofatal-warnings
–-fatal-warnings | –-no-fatal-warnings

–z fatal-warnings–-fatal-warnings オプションを指定すると、リンカーは警告を致命的エラーとして扱います。

–z nofatal-warnings–-no-fatal-warnings オプションを指定すると、リンカーは警告を致命的でないエラーとして扱います。これはデフォルトの動作です。

–z finiarray=function

構築するオブジェクトの .fini_array セクションにエントリを追加します。.fini_array セクションが存在しない場合は、1 つのセクションを新たに作成します。追加されたエントリは function を指すように初期化されます。Oracle Solaris 11.2 リンカーとライブラリガイド の初期設定および終了セクションを参照してください。

–z globalaudit

このオプションは、–P オプションを使用して記録された監査ライブラリの定義を補足します。このオプションを使用できるのは、動的実行可能ファイルまたは位置独立実行可能ファイルを作成する場合だけです。–P オプションを使用してオブジェクト内で定義された監査ライブラリを使用すると、通常、そのオブジェクトの直接の依存関係を監査できます。 –z globalaudit は、監査者をグローバルな監査者に昇格させることによって、すべての依存関係を監査できるようにします。Oracle Solaris 11.2 リンカーとライブラリガイド の監査インタフェースの呼び出しを参照してください。

–P オプションと –z globalaudit オプションを使用して確立された監査者は、LD_AUDIT 環境変数を使用して確立された監査者と同等です。ld.so.1(1) を参照してください。

–z guidance[=item1,item2,...]

生成されるオブジェクトの品質を高めるか、それ以外のメリットがあると考えられるリンカーオプションを提案するガイダンスメッセージを表示します。提供される個々のガイダンスは、システムの進化に伴って変更される可能性があります。古いバージョンのリンカーで提供されていた廃止済みのガイダンスは、新しいバージョンでは削除されることがあります。同様に、新しいガイダンスが新しいバージョンのリンカーに追加されることがあります。したがって、ガイダンスには常に最新のベストプラクティスが表示されます。

ガイダンスを有効にすると同時に特定のガイダンスメッセージが表示されないようにするには、表示しないガイダンスのクラスを示す item トークンの一覧を指定します。これにより、不要なアドバイスは表示されなくなりますが、それ以外のガイダンスは活用できます。リンカーは認識されない item トークンを何も出力せずに無視するため、指定したコマンド行を新旧さまざまなバージョンの Solaris で実行できます。

現在のバージョンのリンカーで提供されるガイダンスと、これらのメッセージを無効にするために使用する item トークンは次のとおりです。

必要な依存関係を指定する

動的実行可能ファイルと共有オブジェクトでは、必要とする依存関係をすべて明示的に定義する必要があります。ガイダンスでは、動的オブジェクトの作成時にシンボル参照が不十分な場合には、–z defs オプションの使用を推奨しています。このガイダンスは、–z guidance=nodefs で無効にできます。

必須でない、または補償している依存関係を指定しない

動的実行可能ファイルおよび共有オブジェクトは、動的オブジェクトによって作成されたシンボル参照を満たさない明示的な依存関係を定義してはいけません。ガイダンスでは、必須でない、または未使用の依存関係を削除するよう推奨しています。未使用の依存関係は、2 つのカテゴリのいずれかに分類できます。

  • シンボル参照を満たさない明示的な依存関係。

  • 構築される動的オブジェクトからのシンボル参照を満たさないが、暗黙の依存関係を補償している明示的な依存関係。–z discard-unused オプションの「依存関係」の説明を参照してください。

これらのどちらのカテゴリのガイダンスも、–z guidance=nounused-dependencies または同義語の –z guidance=nounused で無効にできます。補償している依存関係のガイダンスは、–z guidance=nounused-compensators で無効にできます。

Oracle Solaris 11.2 リンカーとライブラリガイド の使用されない対象物の削除も参照してください。

必須でない再配置可能オブジェクトファイルを指定しない

作成される出力ファイルには、リンク編集に関与しているその他のオブジェクトによって割り当て可能セクションが参照されない再配置可能オブジェクトからのどのような情報も含まれていてはいけません。ガイダンスでは、未使用の再配置可能オブジェクトを削除するよう推奨しています。このガイダンスは、–z guidance=nounused-files で無効にできます。

Oracle Solaris 11.2 リンカーとライブラリガイド の使用されない対象物の削除も参照してください。

レイジー読み込み

レイジー読み込みでは依存関係を識別する必要があります。ガイダンスでは、–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 の構文

すべての mapfile は、バージョン 2 の mapfile 構文を使用する必要があります。ガイダンスでは、バージョン 1 の構文を使用する mapfile が検出された場合、バージョン 2 の構文の使用を推奨しています。このガイダンスは –z guidance=nomapfile で無効にできます。

ライブラリ検索パス

リンカーによって不適切な依存関係が検出されると、何も出力されずに無視されます。たとえば、64 ビットのオブジェクト生成時に検出された 32 ビットの依存関係は無視されます。このような依存関係は、誤った –L オプションが設定されるなど、検索パスの設定が正しくないことから生じる可能性があります。この依存関係があっても問題ではありませんが、この依存関係を処理する必要はなく、解決の必要がある作成時の問題が隠れてしまうおそれがあります。ガイダンスでは、不適切な依存関係はすべて削除することを推奨しています。このガイダンスは、–z guidance=nolibpath で無効にできます。

また、–z guidance=noall でガイダンス機能をすべて無効にできます。より適切なオブジェクトを構築するためのガイダンスとアドバイスについての詳細は、Oracle Solaris 11.2 リンカーとライブラリガイド の第 5 章リンカーのクイックリファレンスを参照してください。

–z help
–-help

標準出力にコマンド行オプションのサマリーを出力して終了します。

–z ignore | record
–-as-needed | –-no-as-needed

リンク編集の一部として参照されない共有オブジェクトの依存関係を無視または記録します。これらのオプションは定位置オプションであり、コマンド行で見つかった参照されない依存関係をリンカーが処理する方法を切り替えるために使用されます。–z ignore が検出されると、以降の参照されない依存関係はすべて、何も出力せずに無視されます。–z record が検出されると、依存関係が参照されるかどうかには関係なく、すべての依存関係が記録されます。

デフォルトでは、依存関係が参照されるかどうかには関係なく、リンカーはすべての依存関係を記録します。定位置でない –z discard-unused=dependencies オプションを使用すると、この初期のデフォルトを変更できます。初期設定が確立されたあとは、–z ignore および –z record を使用してデフォルトの動作を変更できます。

–z initarray=function

構築するオブジェクトの .init_array セクションにエントリを追加します。.init_array セクションが存在しない場合は、1 つのセクションを新たに作成します。追加されたエントリは function を指すように初期化されます。Oracle Solaris 11.2 リンカーとライブラリガイド の初期設定および終了セクションを参照してください。

–z initfirst

オブジェクトの実行時初期設定が完了してから、ほかのオブジェクトの実行時初期設定を同時処理します。また、同時プロセスから除去されたほかのすべてのオブジェクトの実行時最終設定が完了してから、オブジェクトの実行時最終設定が行われるようにします。このオプションは共有オブジェクトの作成時にのみ有用です。

–z interpose

直接結合よりも優先して検索するオブジェクトを指定します。実行時に、–z interpose オプションでオブジェクトにタグが付けられている場合、そのオブジェクトは明示的な割り込みとして識別されます。明示的な割り込みは、オブジェクトが LD_PRELOAD 環境変数を使用して読み込まれたときにも設定されます。オブジェクトの読み込み順序が原因で暗黙的な割り込みが発生することがありますが、この暗黙的な割り込みは実行時リンカーにとっては未知のものです。明示的な割り込みでは、オブジェクトの読み込み順序にかかわらず割り込みを発生させることができます。また、直接結合が有効な場合には、明示的な割り込みによって、実行時リンカーが任意の明示的な割り込み内でシンボルを検索できるようになります。

–z lazyload | nolazyload

遅延して読み込まれる動的な依存オブジェクトの指定を有効または無効にします。lazyload と指定された動的な依存オブジェクトは、初期プロセスの起動では読み込まれません。オブジェクトの読み込みは、はじめてこのオブジェクトへの結合が行われたときに行われます。注: レイジー読み込みには、正しい依存宣言と、プロセス内で使用される動的オブジェクトごとに関連する runpaths が必要です。Oracle Solaris 11.2 リンカーとライブラリガイド の動的依存関係の遅延読み込みを参照してください。

–z ld32=arg1,arg2,...
–z ld64=arg1,arg2,...

リンカーのクラスは、作成される出力ファイルのクラスおよびリンカーが実行されているオペレーティングシステムの機能によって変わります。–z ld[32|64] オプションでは、すべてのリンカーの引数を定義できます。定義された引数は、それぞれ 32 ビットクラスまたは 64 ビットクラスのリンカーによって解釈のみが行われます。

たとえば、サポートするライブラリがクラスに固有のものである場合に、そのライブラリに正しいクラスを指定するには、次のようにします。

$ ld ... -z ld32=-Saudit32.so.1 -z ld64=-Saudit64.so.1 ...
–z loadfltr

フィルタ対象が実行時ただちに処理されることを要求するように、フィルタに指定します。通常、フィルタ処理は、シンボル参照がフィルタに結合されたときにはじめて行われます。このフラグを持つオブジェクトの実行時プロセスは、環境変数 LD_LOADFLTR が設定されている場合と同じように動作します。ld.so.1(1) を参照してください。

–z mapfile-add=name

name を既知の mapfile 条件入力式の述部の一覧に追加します。このオプションは、リンカーによって読み取られる最初の mapfile の先頭に次の行を挿入することと同等です。

$mapfile_version 2
$add name

–z mapfile-add で入力された名前を mapfile $if および $elif 指令とともに使用すると、mapfile 入力を条件に応じて処理できます。Oracle Solaris 11.2 リンカーとライブラリガイド の第 8 章mapfileを参照してください。

–z muldefs
–-allow-multiple-definition

複数のシンボル定義を許容します。デフォルトでは、再配置可能オブジェクト間で重複したシンボル定義が発生すると、致命的なエラーになります。ところが、このオプションを指定すると、エラーにはならずに、最初の定義が有効な定義として使用されます。

–z nodelete

実行時に削除できないように、オブジェクトに指定します。このモードは、dlopen(3C)RTLD_NODELETE モードとともに使用してプロセスにオブジェクトを追加する場合と同様です。

–z nodlopen

オブジェクトを、dlopen(3C) では利用できないように指定するか、dlopen() によって指定されたオブジェクトとして指定します。または dlopen() によって指定されたオブジェクトに必要な依存オブジェクトとして指定します。このオプションは共有オブジェクトの作成時にのみ有用です。

–z nodump

オブジェクトを、dldump(3C) では利用できないようにマークします。

–z parent=object

出力オブジェクトのリンク先の親 オブジェクト (実行可能ファイルまたは共有オブジェクト) を指定します。通常、このオプションを使用するのは plugin 共有オブジェクトの作成時で、このオブジェクトは実行可能ファイルにより実行時に dlopen () 関数を介してロードされます。親オブジェクトからのシンボルテーブルは、plugin オブジェクトからの参照を満たすために使用されます。Oracle Solaris 11.2 リンカーとライブラリガイド の第 2 章リンカーを参照してください。

–z preinitarray=function

構築するオブジェクトの .preinit_array セクションにエントリを追加します。.preinit_array セクションが存在しない場合は、1 つのセクションを新たに作成します。追加されたエントリは function を指すように初期化されます。Oracle Solaris 11.2 リンカーとライブラリガイド の初期設定および終了セクションを参照してください。

–z rescan-now

これらのオプションは、リンカーに渡されたアーカイブファイルを再走査します。デフォルトでは、アーカイブの検索は、コマンド行に指定されたときに一度だけ処理されます。通常アーカイブは、そのシンボル定義でアーカイブの前に指定されている参照を解決できるように、コマンド行の最後に指定します。ただし、実際には、アーカイブ間での相互依存関係を解決するために、アーカイブ自体を複数回指定しなければならないことがあります。

–z rescan-now は位置オプションで、コマンド行上で検出されるとただちにリンカーによって処理されます。コマンド行上でそのポイントに達したすべてのアーカイブはただちに処理され、シンボル参照を解決する追加のアーカイブメンバーを見つけ出そうとします。アーカイブ全体を走査しても新しい再配置可能オブジェクトが抽出されないと、アーカイブの再走査は終了します。

–z rescan-start ... –z rescan-end
–-start-group ... --end-group
–( ... -)

アーカイブ再走査グループを定義します。これは位置構成で、終端区切りオプションが検出されるとリンカーによってただちに処理されます。グループ区切りオプション内で見つかったアーカイブはグループとして再処理され、シンボル参照を解決する追加のアーカイブメンバーを見つけ出そうとします。アーカイブ全体を走査しても新しい再配置可能オブジェクトが抽出されないと、アーカイブの再走査は終了します。アーカイブ再走査グループを入れ子にすることはできません。

–z strip-class=[!]class1,[!]class2 ,...

特定のクラスのセクションがすべての入力オブジェクトから削除されるため、これらのセクションは出力ファイルに追加されなくなります。このオプションを使用すると、出力ファイルから省略できるセクションに対してきめ細かな制御ができます。

以降の strip クラスの説明は、割り当て不可能なセクションにのみ適用されます。

各クラスのトークンを '!' の前に追加して、そのクラスの削除が禁止されていることを示すことができます。この定義は、nonalloc クラスと組み合わせる場合に役立つことがあります。たとえば、'–z strip-class=nonalloc,!note' を使用すると、注意のセクションを除くすべての割り当て不可能なセクションが削除されます。

取り除かれたセクションは、出力オブジェクトから完全に削除されます。–z ancillary オプションを使用すると、動的でないシンボルテーブル .symtab に関するこの動作と、それに関連したセクションが変更されます。デフォルトでは、シンボルテーブルは、プライマリオブジェクトと補助的なオブジェクトの両方に書き込まれます。取り除かれた場合、シンボルテーブルは補助的なオブジェクトにのみ書き込まれ、プライマリオブジェクト内に存在しないとしてマークされます。.symtab–z ancillary を使用せずにオブジェクトから取り除かれた場合、このセクションは通常の方法で完全に削除されます。

次のクラスのセクションを定義できます。

nonalloc

割り当て不可のセクションをすべて削除します。これらのセクションは、SHF_ALLOC セクションフラグを含んでいないとものとして識別されます。このクラスは、symbol クラスを除く、ほかのすべてのクラスをカプセル化します。nonalloc クラスは多くの場合、単独で十分であり、不要なすべてのセクションを削除できます。

annotate

すべての注釈セクションを削除します。これらのセクションは、メモリーアクセスツールや、カバレージ関連のツールによって使用される情報を提供します。これらのセクションは、SHT_SUNW_ANNOTATE セクションタイプを指定することで識別します。

comment

すべてのコメントセクションを削除します。これらのセクションは、.comment セクション名を指定することで識別します。あるいは、コメントセクションの操作には mcs(1) ユーティリティーが一般的に使用されています。

debug

デバッグデータを含めるためによく使用されるセクションを削除します。これらのセクションは、.compcom.line.stab*.debug*、または .zdebug* セクション名を指定することで識別します。また、これらのセクションは、SHT_SUNW_DEBUG* セクションタイプを指定することで識別します。

exclude

実行可能セクションをすべて削除します。これらのセクションは、SHF_EXCLUDE セクションフラグを指定することで識別します。このクラスは、再配置可能オブジェクトを作成する場合に役立ちます。デフォルトでは、このようなセクションは、動的実行可能ファイルまたは共有オブジェクトの作成時には自動的に除外され、再配置可能オブジェクトの作成時には保持されます。

note

ノートセクションを削除します。これらのセクションは、SHT_NOTE セクションタイプを指定することで識別します。

symbol

出力ファイルが再配置可能オブジェクトでない場合に、割り当て不可のシンボルテーブルセクションと文字列テーブルセクションをすべて削除します。これらのセクションは、SHT_SYMTAB セクションタイプを指定することで識別します。関連する文字列テーブルもすべて削除されます。

–z stub

スタブ共有オブジェクトを生成します。スタブオブジェクトは共有オブジェクトで、mapfiles からすべて作成されます。また、コードやデータを持ちませんが、本物のオブジェクト同じリンクインタフェースを提供します。スタブオブジェクトは、実行時には使用できません。ただし、スタブオブジェクトに対してアプリケーションを作成できます。その場合、スタブオブジェクトは、実行時に使用される本物のオブジェクトの名前を提供し、実行時に本物のオブジェクトを使用します。

スタブオブジェクトは共有オブジェクト用に対してのみ作成でき、エクスポートされる大域シンボルを定義する mapfile を提供する必要があります。そのため、–ztype=shared または –G オプションと、–M オプションが、–z stub の使用時に必要となります。スタブオブジェクトの作成時には、リンカーはコマンド行で指定されているオブジェクトとライブラリファイルをすべて無視するため、スタブを作成するためにこれらのファイルが存在している必要はありません。コンパイル手順が省略でき、リンカーの作業が比較的少ないため、スタブオブジェクトはすぐに作成できます。

Stub Objects in Linker and Libraries Guideを参照してください。

–z symbolcap

オブジェクトの機能を定義する再配置可能オブジェクトを、シンボルの機能を定義する再配置可能オブジェクトに変換します。Oracle Solaris 11.2 リンカーとライブラリガイド のオブジェクト機能のシンボル機能への変換を参照してください。

–z target=sparc | x86

出力オブジェクトの機械タイプを指定します。サポートされるターゲットは、SPARC と x86 です。–64 オプションも存在していて、対応する 64 ビット機械タイプが使用されている場合を除き、指定されたターゲット用の 32 ビット機械タイプが使用されます。デフォルトでは、生成されるオブジェクトの機械タイプは、コマンド行から処理される最初の ELF オブジェクトによって決まります。オブジェクトを指定していない場合、機械タイプは、コマンド行から処理される最初のアーカイブ内で検出された最初のオブジェクトによって決まります。オブジェクトもアーカイブもない場合、リンカーはネイティブマシンを仮定します。このオプションは、mapfile からの入力のみでリンカーを使用してオブジェクトを直接作成するときに便利です。 (–M の説明を参照)。また、最初のオブジェクトが目的の機械タイプのオブジェクトではない、異なる機械タイプのオブジェクトを含むアーカイブからすべてをリンクするというごくまれな場合にも便利です。

–z text | textoff | textwarn

これらのオプションは、動的モードでのみ使用できます。–z text オプションは、書き込み不可能な割り当て可能セクションに対する再配置が残っていた場合、強制的に致命的エラーを発生させます。歴史的理由から、この動作は、実行可能オブジェクトまたは共有オブジェクトを作成するときのデフォルトではありません。ただし、作成される動的オブジェクトのテキスト部分を実行中の複数のプロセス間で共有可能にするため、このオプションを使用することをお勧めします。オブジェクトをメモリーに読み込むときの再配置オーバーヘッドが最低限に抑えられることを共有テキストセグメントは保証します。Oracle Solaris 11.2 リンカーとライブラリガイド の位置独立のコードを参照してください。

–z textoff オプションは、すべての割り当て可能セクション (書き込み不可能なセクションを含む) に対する再配置を許可します。共有オブジェクト作成時のデフォルトの設定です。

–z textwarn オプションは、書き込み不可能な割り当て可能セクションに対する再配置が残っていた場合、警告を表示します。実行可能オブジェクト作成時のデフォルトの設定です。

–z type=object-type

作成するオブジェクトのタイプを指定します。次のオブジェクトタイプを指定できます。

exec

動的実行可能ファイル。

pie

位置独立実行可能ファイル。このオプションは –ztext オプションの表明も行います。

reloc

再配置可能オブジェクト。これは、–r オプションを指定する場合と同じです。

shared

共有オブジェクト。これは、–G オプションを指定する場合と同じです。このオプションは –ztext オプションの表明も行います。

–z verbose

このオプションはリンクエディット時、警告診断を追加します。現在、このオプションによって次の警告が有効になります。

  • 再配置の置き換えの疑わしい使用。

  • 共有オブジェクト作成時の静的 TLS 再配置の制限された使用。

  • シンボルの可視性の不一致。

将来、このオプションは、デフォルトで生成される詳細な診断を提供するように拡張される予定です。

–zwrap=symbol
–wrap= symbol
–-wrap= symbol

ソースコードを変更しなくてもラッパーコードを出力オブジェクトにリンクできるようにするため、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 関数を呼び出します。

本物の関数とラップされた関数は別々のソースファイルで保持するようにしてください。そうしないと、コンパイラまたはアセンブラが呼び出しの解決をリンカーに任せずに自分で行うため、ラップの発生が妨げられることがあります。

セカンダリオプション

セカンダリオプション

次のオプションは、一般にはあまり使用されません。これらのオプションは、下位互換性、非常に特殊な機能、または機能強化されたバリエーションに置き換えられたオプションを提供します。

–a

静的モードでのみ、静的実行可能ファイルを生成します。未定義の参照があるとエラーを発行します (静的モードのデフォルトの動作)。–a オプションを –ztype=reloc オプションや –r オプションと一緒に使用することはできません。「機能説明」の「静的実行可能ファイル」を参照してください。

–b

動的モード専用です。動的実行可能ファイルに対して、共有オブジェクト内のシンボルを参照するような特殊な再配置処理を行いません。–b オプションを指定しない場合、リンカーは、テキストセグメントが読み取り専用のままになるように動的実行可能ファイル内でいくつかの方法を適用します。1 つの方法は、共有オブジェクトで定義されている関数への参照に対して位置独立型の特別な再配置を作成することです。もう 1 つの方法は、共有オブジェクト内に定義されているデータオブジェクトが実行時に実行可能ファイルのメモリーイメージにコピーされるように設定することです。

このオプションは、特殊化された動的オブジェクトを対象としているため、一般的な用途に使用することはお勧めしません。このオプションを使用すると、オブジェクトを共有可能にするために必要な特殊処理がすべて無効になります。また、64 ビット実行可能オブジェクトの再配置を妨げることもあります。

–B group

共有オブジェクトとその依存オブジェクトを 1 つのグループにまとめます。グループ内のオブジェクトは、実行時に、グループ内のほかのメンバーに結合されます。このモードは、dlopen(3C)RTLD_GROUP モードとともに使用してプロセスにオブジェクトを追加する場合と同様です。あるグループに属しているオブジェクトに対して明示的な依存関係を持つオブジェクトは、自分自身もそのグループのメンバーになります。

グループは自己完結している必要があるため、–B group オプションの使用は –z defs オプションも表明します。

グループを確立すると、オブジェクトのグループの結合を制御するための基本的な手段が提供されます。ただし、より適切な制御は、直接結合で実現できます。–B direct オプションを参照してください。

–B symbolic

動的モード専用です。共有オブジェクトを作成する際、可能であれば、大域シンボルへの参照を共有オブジェクト内の参照定義に結合します。通常、共有オブジェクト内の大域シンボルへの参照は、定義が使用可能でも実行時まで結合されません。このモデルでは、実行可能ファイルやほかの共有オブジェクトに含まれる同じシンボルの定義で、そのオブジェクト自体の定義をオーバーライドすることができます。–z defs でオーバーライドしないかぎり、リンカーは未定義シンボルに対して警告を発行します。

このオプションは、特殊化された動的オブジェクトを対象としているため、一般的な用途に使用することはお勧めしません。オブジェクトに必要な実行時の再配置処理を削減するには、直接結合の使用とともに、バージョン定義の作成をお勧めします。–B direct オプションを参照してください。

–d y | n

–d y が指定されている場合 (デフォルト)、リンカーは動的リンクを使用します。–d n が指定されている場合、リンカーは静的リンクを使用します。「機能説明」の「静的実行可能ファイル」および –B dynamic | static の項目を参照してください。

–I name
–-dynamic-linker name

実行可能オブジェクトの作成時、プログラムヘッダーに書き込まれるインタプリタのパス名として name を使用します。静的モードのデフォルトの設定では、インタプリタは使用されません。動的モードのデフォルトの設定では、実行時リンカー ld.so.1(1) の名前が使用されます。どちらの場合も、–I name でデフォルトの設定を無効にできます。exec(2) は、a.out を読み込む際にこのインタプリタをロードし、a.out ではなくインタプリタに制御を渡します。

–t

サイズやアラインメントの異なる多重定義の暫定的な (共通ブロック) データシンボルを検出した場合の警告の出力を抑止します。このオプションは、–z relax=common オプションを指定する場合と同じです。

–Wl,option

–Wl, オプションを使えば、コンパイラドライバ経由でリンカーにオプションを渡すことができます。コンパイラドライバは通常、–Wl, を取り除き、残りのオプションをリンカーに渡します。リンカーが –Wl, オプション全体で直接呼び出されることがありました (特に複雑な移植性のあるソフトウェアを構築する場合)。そのような状況でも柔軟に対応できるよう、リンカーは –Wl, を除去して残りのオプションを解釈します。そうしたオプションは通常ユーザーの制御下にないため、認識されない – W オプションが見つかるたびに、致命的なエラーではなく警告が発行され、そのオプションは無視されます。

–Y P,dirlist

ライブラリ検索に使用するデフォルトのディレクトリを変更します。dirlist には、複数のパスをコロンで区切って指定します。デフォルトの検索パスを変更する必要はないはずです。デフォルトの検索パスは、新しいリリースのオペレーティングシステムでは変わる可能性があります。このオプションを使って完全な検索パスを明示的に指定すると、新しいリリースのオペレーティングシステムとの互換性がなくなる危険性があります。このオプションが維持されているのは、いくつかのコンパイラドライバの歴史的な使用法をサポートするためです。サポートされてはいますが、そのような使用法はお勧めできません。リンク編集で必要となる追加の検索パスは、–L オプションで提供すべきです。

–z absexec

動的実行可能ファイルを構築するときにのみ使用されます。このオプションは、外部の絶対的シンボルへの参照を、実行時ではなく今すぐに解決するよう指示します。これによって、ある条件が整った場合には、動的オブジェクトがスワップ領域を大量に消費する可能性のあるテキストの再配置を行わなくなります。

–z altexec64

64 ビットのリンカーを実行します。これまでは、実行されたリンカーのクラスは、作成された ELF オブジェクトのクラスによって決まっていました。現在では、実行されるリンカーのクラスは、ベースとなるシステムのクラスによって決まります。現在のシステムでは、これは常に 64 ビットになります。このオプションは、下位互換性を確保するために残されています。

–z combreloc | nocombreloc

デフォルトでは、リンカーは、実行可能ファイルまたは共有オブジェクトを作成するときに複数の再配置セクションを結合します。このセクション結合は再配置可能オブジェクトとは異なるもので、再配置可能セクションでは、再配置の適用が必要なセクションと 1 対 1 の関係が維持されます。–z nocombreloc オプションは、この再配置セクションのマージを無効にし、元の再配置可能オブジェクトで見つかった 1 対 1 の関係を保持します。

リンカーは、データ再配置セクションのエントリを、そのシンボル参照に従ってソートします。これにより、実行時のシンボル参照を最低限に抑えます。複数の再配置セクションが結合されている場合は、これにより、オブジェクトがメモリーに読み込まれるときの再配置オーバーヘッドを最低限に抑え、動的オブジェクトの実行時の読み込みを速くします。

これまでは、個々の再配置セクションはすべての実行可能ファイルまたは共有オブジェクトに引き継がれ、前述した再配置セクションのマージを有効にするには –z combreloc オプションが必要でした。現在では、再配置セクションのマージはデフォルトになっています。–z combreloc オプションは古い構築環境のために受け入れられますが、このオプションは不必要で効果はありません。

–z groupperm | nogroupperm

一意のグループにつながる依存関係の割り当て、または割り当ての解除を行います。グループに対して依存関係の割り当てを行うと、–B group オプションを使って依存関係を構築した場合と同じ効果が得られます。

–z nocompstrtab

ELF 文字列テーブルおよびコメントセクションの圧縮を無効にします。デフォルトでは、文字列の圧縮は、SHT_STRTAB セクション、SHF_MERGESHF_STRINGS のセクションフラグが設定されている SHT_PROGBITS セクション、およびコメントセクションに適用されます。

mcs(1) ユーティリティーを –c オプションとともに使用すると、オブジェクトが構築されたあとにコメントセクションを圧縮できます。

–z nodefaultlib

オブジェクトが、実行時デフォルトライブラリ検索パス (LD_LIBRARY_PATH や実行パスの後に使用) を無視するように指定します。このように指定すると、すべての依存オブジェクトが実行パスを使用することになります。

–z noldynsym

動的実行可能ファイルまたは共有オブジェクトに .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 オプションを使用することです。

–z nopartial

部分的に初期化されたシンボルが、再配置可能なオブジェクト内に定義されている場合、このシンボルは、生成される出力ファイルで展開されます。

–z now

オブジェクトがレイジーでない実行時結合を要求するように指定します。このモードは、dlopen(3C)RTLD_NOW モードとともに使用してプロセスにオブジェクトを追加する場合と同様です。また、このモードは、LD_BIND_NOW 環境変数を有効にする場合と同様です。ld.so.1(1) を参照してください。

–z origin

実行時ただちに $ORIGIN を処理することを要求するように、オブジェクトに指定します。この動作は現在はデフォルトです。このオプションは、従来機能との互換性のためにのみ残されています。

–z redlocsym

SHT_SYMTAB シンボルテーブルから、SECT シンボル以外のすべてのローカルシンボルを削除します。ローカルシンボルを参照する配置はすべて更新され、SECT シンボルを参照するようになります。このオプションを使用すると、特殊なオブジェクトのシンボルテーブルのサイズを大幅に削減できます。–z strip-class および –z noldynsym オプションも参照してください。

–z redlocsym オプションは、オペレーティングシステムカーネル内部で使用されるような特殊なオブジェクトに対して有用ですが、一般的な用途には推奨されません。シンボルテーブル SHT_SYMTAB のサイズは実行時動作に影響を与えず、ローカルシンボルの削除はプロセスの可観測性に悪影響を与える場合があります。ローカルシンボルを削除すると、コンパイラドライバ –g オプションを使用して生成されるデバッグ情報が少なくなる可能性があります。また、ローカルシンボルを削除すると、通常は .SUNW_ldynsym セクションに書き込まれる情報も削除されるため、pstack(1)truss(1) などのデバッガやツールの有効性が低下します。

–z relax=item1,item2,...

リンカーは、結果となる出力オブジェクトが有効で実行時に使用可能であることを確認するために、有効性チェックを実行します。さらにリンカーは、さまざまな再配置を遷移させることでより最適な命令シーケンスを生成することもできます。–z relax オプションを使えば、有効性チェックや再配置遷移を緩和させることで、拒否されるはずだった出力オブジェクトが生成することができます。


注 - 有効性チェックを無効にすると、破損したオブジェクトやその他の理由で使用不可能なオブジェクトが作成される可能性があります。–z relax は主にコンパイラ開発者向けに特殊化されたオプションであり、一般用途向けのものではありません。

無効にできる有効性チェックや再配置遷移、およびそれらの無効化に使用される item トークンは、次のとおりです。

comdat

リンカーは、通常、削除された COMDAT セクションを参照するシンボルを使用した再配置を検出したときに致命的なエラーを出力します。–z relax=comdat が有効化された場合、リンカーは代わりにそのような再配置を、保持された COMDAT セクション内の同等のシンボルにリダイレクトします。

common

–z relax=common は、サイズやアラインメントが異なる暫定的 (共有ブロック) 多重定義データシンボルに対する警告を無効にします。

secadj

ELF オブジェクトでは、出力オブジェクト内の特定のセクションが指定された順序で互いに隣接している必要があります。リンカーはそのような順序を自動的に維持しますが、それが、セクションのレイアウトを明示的に変更しようとするリンカー mapfile によって阻害される可能性があります。リンカーは、そうした無効なレイアウトを致命的なエラーとみなします。このエラーを無効にするには、–z relax=secadj を使用します。

symbound

シンボルは包含元セクションの外側にあるメモリーを参照してはいけません。そうしないと、結果となるオブジェクトが無効なメモリーにアクセスしてしまう可能性があります。デフォルトでは、リンカーはそのようなシンボルを致命的なエラーとみなします。このエラーを無効にするには、–z relax=symbound を使用します。

transdisp

SPARC 上のある GOTDATA 再配置ファミリでは、Global Offset Table (GOT) を基準にしてデータにアクセスできます。ローカルにバインドされたデータ項目により、リンカーは関連するコードシーケンスを遷移させ、より最適なアクセスモデルを提供することができます。ただしこのモデルでは、GOT アドレスの前後 2G バイト以内のデータへのアクセスのみがサポートされます。この制限を超える再配置は致命的なエラーとなります。データ参照がこの制限を超えるようなまれな場合は、–z relax=transdisp オプションを使って GOTOP アクセスモデル遷移を調整できます。この緩和により、アドレス範囲の制限はなくなりますが、代わりにコードシーケンスの最適化の度合いが若干低下します。

transtls

スレッドローカルストレージ (TLS) アクセスでは、データアクセス用のモデルが多数提供されています。Oracle Solaris 11.2 リンカーとライブラリガイド のスレッド固有ストレージのアクセスモデルを参照してください。リンカーは、作成中の出力ファイルやシンボルの可視性に基づいて関連コードシーケンスを遷移させることができます。–z relax=transtls オプションを使えば、TLS アクセスモデルの遷移を抑制できます。

–z relaxreloc

このオプションは、–z relax=comdat オプションを指定する場合と同じです。

–z rescan

リンク編集に提供されたアーカイブファイルの再スキャンを起動する位置独立オプション。リンカーは、コマンド行全体の処理を完了するまで再走査作業を延期し、コマンド行上にあるすべてのアーカイブに対して最後の再走査作業を開始します。–z rescan の再走査作業では、初期化 (.init) セクションまたは最終設定 (.fini) セクションを含むオブジェクトが誤って処理され、それらのセクションのコードが動作しないことがあります。このため、非推奨の –z rescan ではなく、–z rescan-now を使用することを推奨します。

環境変数

LD_ALTEXEC

代替リンカーのパス名。リンカーは実行後、この代替リンカーに制御を渡します。この環境変数により、さまざまなコンパイルドライバから呼び出されるデフォルトのリンカーを上書きする汎用的な手段が提供されます。–z altexec64 オプションを参照してください。

LD_LIBRARY_PATH

–l オプションで指定されたライブラリを検索するディレクトリのリストを指定します。複数のディレクトリを指定する場合は、ディレクトリとディレクトリの間をコロンで区切ります。2 つのディレクトリをセミコロンで区切る方式がもっとも一般的です。

dirlist1;dirlist2

次のようにリンカーの呼び出し時に –L が複数回指定されている場合、

$ ld ... -Lpath1 ... -Lpathn ...

検索の順番は、次のようになります。

dirlist1 path1 ... pathn dirlist2 LIBPATH

ディレクトリリストにセミコロンが含まれていない場合、dirlist2 と解釈されます。

LD_LIBRARY_PATH 環境変数も、動的な依存関係を検索する実行時リンカーに影響を及ぼします。

この環境変数には、_32 または _64 という接尾辞を指定できます。この接尾辞を追加することで、LD_LIBRARY_PATH 環境変数は 32 ビットのプロセスまたは 64 ビットのプロセス専用になり、接尾辞のない LD_LIBRARY_PATH 環境変数が有効な場合でも、優先的に使用されます。

LD_NOEXEC_64

64 ビットのリンカーの自動実行を抑止します。実行されるリンカーのクラスは、ベースとなるシステムのクラスによって決まります。現在のシステムでは、これは常に 64 ビットになります。32 ビット版のリンカーが作成できる 64 ビットイメージにはいくつかの制限があります。ただし、リンク編集の中には、32 ビットのリンカーを使用した方が速いものも存在します。

LD_OPTIONS、LD_UNSET、LD_{object-type}_UNSET、LD_{object-type}_OPTIONS

これらの環境変数を使えば、リンカーコマンド行に対して別のオプションの追加や既存オプションの削除を行えます。object-type は、–z type オプションによって定義されるタイプ (大文字) であり、EXECPIERELOCSHARED のいずれかになります。これらの変数を使えば、スクリプト内やビルド環境内に埋め込まれたコマンド行オプションの上書きまたは設定解除を行えます。「オプションの処理」を参照してください。

LD_RUN_PATH

リンカーに実行パスを指定する代替手段です (–R オプションを参照)。LD_RUN_PATH と –R オプションを両方指定すると、–R オプションが優先されます。

SGS_SUPPORT

リンカーによって読み込まれ、リンクプロセスの情報を与えられた共有オブジェクトを、コロンで区切った形式で一覧します。この環境変数には、_32 または _64 という接尾辞を指定できます。こうすることで、この環境変数を、リンカーの 32 ビットクラスまたは 64 ビットクラスのどちらか専用にできます。この指定は、現在有効になっている接尾辞の付いていないバージョンの環境変数の指定がオーバーライドされます。–S オプションを参照してください。

文字列 LD_ で始まる環境変数名は、ldld.so.1(1) の拡張用として予約されています。

ファイル

libx.so

共有オブジェクトライブラリ。

libx.a

アーカイブライブラリ

a.out

デフォルトの出力ファイル。

LIBPATH

32 ビットライブラリの場合、デフォルトの検索パスは、順番に、/lib、そして /usr/lib です。64 ビットライブラリの場合、デフォルトの検索パスは、順番に、/lib/64、そして /usr/lib/64 です。

/usr/lib/ld

リンク編集時に使用可能な複数の mapfiles を含むディレクトリです。これらの mapfiles により、メモリーレイアウトの定義、bss の整列、および実行不可能なスタックの定義など、さまざまな機能が提供されます。

属性

属性についての詳細は、マニュアルページの attributes(5) を参照してください。

属性タイプ
属性値
使用条件
system/linker
インタフェースの安定性
確実

関連項目

as(1)crle(1)elfcompress(1)gprof(1)ld.so.1(1)ldd(1)mcs(1)pvs(1)strip(1)exec(2)stat(2)zlib (3)、dlopen(3C)dldump(3C)elf(3ELF)ar.h(3HEAD)a.out(4)attributes(5)

Oracle Solaris 11.2 リンカーとライブラリガイド

リンカーのデフォルト動作を指定するためのオプションは、歴史的理由から残されています。しかし、動的オブジェクトが広く使用されている現在のプログラミング環境では、従来とは異なるデフォルトの方が有効である場合が少なくありません。ただし、従来のデフォルトは、既存のプログラム開発環境との互換性を維持するために残しておく必要があります。このマニュアルでは従来のデフォルトは、可能なかぎり、そのことを明示する方法で記述します。現在の推奨されるオプションについては、Oracle Solaris 11.2 リンカーとライブラリガイド の第 5 章リンカーのクイックリファレンスを参照してください。

リンカーにより作成されるファイルがすでに存在する場合、そのファイルは、すべての入力ファイルが処理されたあとにリンクが解除されます。指定された名前で新しいファイルが作成されます。これにより、リンカーは、古いファイルの内容にアクセスしている既存のプロセスが実行を継続できるようにする一方で、同時にそのファイルの新しいバージョンを作成できます。古いファイルにほかにリンクが含まれていない場合は、そのファイルを参照している最後のプロセスが終了すると、その削除されたファイルのディスク領域が解放されます。

Oracle Solaris 11 では、作成されるファイルがすでに存在するときのリンカーの動作が変更されました。古いバージョンでは、既存のファイルはその場所で書き換えられるため、そのファイルを使用している動作中のプロセスが壊れてしまう可能性がありました。この変更は、ファイルシステム内にハードリンクが複数ある出力ファイルに影響します。以前は、すべてのリンクがそのまま維持され、新しいファイルの内容にもアクセスしていました。新しいリンカーの動作はこのようなリンクを解除するため、指定された出力ファイル名だけが新しいファイルを参照します。それ以外のリンクはすべて、古いファイルを引き続き参照します。一貫性のある動作を保証するには、リンカーの出力ファイルへの複数のハードリンクに依存するアプリケーションで、そのほかのファイル名を明示的に削除し、リンクし直す必要があります。