Go to main content

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

印刷ビューの終了

更新: 2018年8月8日
 
 

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] [-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 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 nodelete]
     [-z nodlopen] [-z parent=object] [-z preinitarray=function]
     [-z rescan-now] [-z rescan-start ... -z rescan-end]
     [-z strip-class=[!]class1,[!]class2,...] [-z stub]
     [-z sx=extension[=mode]] [-z symbolcap] [-z sysroot=dir]
     [-z target=sparc | x86] [-z text | textwarn | textoff]
     [-z type=object-type] [-z verbose] [-z wrap=symbol]
     file ...

説明

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

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

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

  • 動的実行可能ファイル – 再配置可能オブジェクトを連結したもので、exec(2) を使って実行できます。動的実行可能ファイルは、実行時リンカー ld.so.1(1) の制御下で固定された仮想アドレス空間にロードされ、実行時プロセスを生成するために実行されます。動的実行可能ファイルは、通常共有オブジェクトの形で 1 つ以上の依存関係を持っています。

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

  • カーネルモジュール – 再配置可能オブジェクトの特殊な場合で、動的リンクの情報を含んでいます。これは、オペレーティングシステムのカーネルからロードできます。カーネルモジュールは、ほかのカーネルモジュールへの依存関係を持つことができます。

    カーネルモジュールが作成されるのは、–z type=kmod オプションが使用された場合です。

  • 位置独立実行可能ファイル (PIE) – 位置独立形式の動的実行可能ファイルであり、exec(2) を使って実行できます。位置独立実行可能ファイルは、実行時リンカー ld.so.1(1) の制御下で任意の仮想アドレス空間にロードされ、実行時プロセスを生成するために実行されます。位置独立実行可能ファイルは通常、共有オブジェクトの形で 1 つ以上の依存関係を持っています。

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

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

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

  • 共有オブジェクト – 再配置可能オブジェクトを連結したもので、ほかの動的オブジェクトに対してサービスを提供します。共有オブジェクトは、実行時リンカー ld.so.1(1) の制御下で任意の仮想アドレス空間にロードされ、実行時に実行可能ファイルまたはその他の共有オブジェクトにバインドされます。また、共有オブジェクトの中にも、ほかの共有オブジェクトに依存する依存関係がある場合もあります。

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

  • 静的実行可能ファイル – 再配置可能オブジェクトを連結したもので、実行時リンカー ld.so.1(1) の助けがなくても、exec(2) を使って直接実行できます。

    静的実行可能ファイルが作成されるのは、–z type=static オプションまたは –a オプションを使用した場合です。ただし、Oracle Solaris オペレーティングシステムの最近のバージョンは、静的実行可能ファイルの作成をサポートしていません。Static Executablesを参照してください。

このセクションの説明はすべて、動的オブジェクト、再配置可能オブジェクト、またはカーネルモジュールの構築を前提にしています。

動的リンク環境では、リンカーと実行時リンカー ld.so.1(1) の作業が密接に結び付けられます。これらのユーティリティーについては、Oracle Solaris 11.4 Linkers and Libraries Guideで詳しく説明しています。

動的実行可能ファイルと位置独立実行可能ファイルをまとめて実行可能ファイルと呼びます。これらの実行可能ファイルと共有オブジェクトをまとめて動的オブジェクトと呼びます。

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

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

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

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

任意の仮想アドレス空間の効率的なマッピングを実現できるように、位置独立実行可能ファイルと共有オブジェクトを位置独立コード (PIC) から作成することをお勧めします。–z text オプションを参照してください。

静的実行可能ファイル

静的実行可能ファイルは、多くのリリースで作成しないように勧められています。実際、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 オプションによって受け付けられる値に対応し、EXECKMODPIERELOCSHARED のいずれかになります。たとえば、LD_EXEC_OPTIONS 環境変数は、オブジェクトタイプが動的実行可能ファイルである場合に解釈されます。

LD_{object-type}_OPTIONS が存在する場合は、この変数が最初に検索され、–z type オプションが指定されているかどうかが検出されます。この検索は、作成される出力ファイルのオブジェクトタイプに影響する最後の機会を提供します。

オブジェクトタイプがファイナライズされ、この最終のオブジェクトタイプに関連付けられた環境変数が処理されます。これらの変数はオブジェクトタイプまたはクラスを変更できません。

オプション処理は、次の順序で要約できます。

  • LD_OPTIONS 環境変数から。

  • コマンド行から。

  • LD_UNSET 環境変数から。

  • LD_{object-type}_OPTIONS 環境変数から - –z type オプションに対してのみ検索されます。

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

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

次の例では、リンカーによって作成されたすべてのオブジェクトのガイダンスが有効にされている場合の構築プロセスを実行します。動的実行可能ファイルは位置独立実行可能ファイルになり、多数のセキュリティー拡張機能が有効にされます。共有オブジェクトには確実に位置独立コードが含まれ、それらのすべての依存関係が定義されます。

$ LD_OPTIONS=-zguidance  \
  LD_EXEC_OPTIONS=-ztype=pie  \ 
  LD_PIE_OPTIONS=-zsx=aslr,nxheap,nxstack  \ 
  LD_SHARED_OPTIONS="-ztext -zdefs"  <build process>

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

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 オプションを指定すると、作成されているオブジェクトは外部インタフェースと直接結合を続けられます。Chapter 7, Direct Bindings in Oracle Solaris 11.4 Linkers and Libraries Guideを参照してください。

–B dynamic | static

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

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

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

Mapfile バージョンおよびインタフェース定義には、auto-elimination または auto-reduction 指令を含めることができます。SYMBOL_SCOPE and SYMBOL_VERSION Directives in Oracle Solaris 11.4 Linkers and Libraries Guideを参照してください。これらの指令を指定すると、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 は、使用可能なトークンをすべて指定した場合と同じ意味を持つ特殊なトークンです。Debugging Aids in Oracle Solaris 11.4 Linkers and Libraries Guideを参照してください。特殊なトークン help を単独で指定した場合の出力先は、標準出力になります。ほかの任意のトークンを指定した場合の出力先は、標準エラーになります。

–e epsym
–-entry epsym

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

–f name
–-auxiliary name

共有オブジェクトを構築するときにのみ使用されます。このオプションを指定すると、共有オブジェクトのシンボルテーブルが、name に指定した共有オブジェクトのシンボルテーブルで、補助フィルタとして使用されるようになります。このオプションは複数回指定できますが、本オプションは –F と同時に指定することはできません。Generating Auxiliary Filters in Oracle Solaris 11.4 Linkers and Libraries Guideを参照してください。

–F name
–-filter name

共有オブジェクトを構築するときにのみ使用されます。このオプションを指定すると、共有オブジェクトのシンボルテーブルが、name に指定した共有オブジェクトのシンボルテーブルで、フィルタとして使用されるようになります。このオプションは複数回指定できますが、本オプションは –f と同時に指定することはできません。Generating Standard Filters in Oracle Solaris 11.4 Linkers and Libraries Guideを参照してください。

–G
–shared

動的モード専用です。共有オブジェクトを生成します。未定義のシンボルも許容されます。–z type=shared オプションも参照してください。Chapter 4, Shared Objects in Oracle Solaris 11.4 Linkers and Libraries Guideを参照してください。

–h name
–soname name

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

–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 で終わるファイルのみを選択します。

カーネルモジュールを構築するときに、依存関係カーネルモジュール x を検索します。依存関係は、単一の名前 x で指定するか、スラッシュで区切った interface/module ペアで指定できます。

リンカーはライブラリが検出された時点でライブラリの検索を行うので、–l の位置が重要になります。Linking With Additional Libraries in Oracle Solaris 11.4 Linkers and Libraries Guideを参照してください。

–L path
–-library-path path

ライブラリ検索ディレクトリに path を追加します。リンカーはライブラリの検索を、まず –L オプションで指定されたすべてのディレクトリ内で行い、次に標準ディレクトリ内で行います。このオプションは、同一コマンド行の –l オプションより前に指定した場合のみ有効です。Directories Searched by the Link-Editor in Oracle Solaris 11.4 Linkers and Libraries Guideを参照してください。

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

path が接頭辞 $SYSROOT/ で始まっている場合、その接頭辞は、–z sysroot を使用しない場合は / で置き換えられ、使用している場合は –z sysroot オプションに指定された sysroot ディレクトリで置き換えられます。GNU リンカーとの互換性のために接頭辞 =/ も受け入れられ、$SYSROOT/ 接頭辞と同じ意味になります。sysroot 接頭辞を使用すれば、ネイティブアプリケーションとクロスリンクアプリケーションの両方で単一の –L の定義を使用できます。

–m

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

–M mapfile

マップファイル mapfile を、リンカーへの指令が記述されているテキストファイルとして読み取ります。このオプションは複数回指定できます。mapfile がディレクトリの場合、stat(2) で定義されるように、そのディレクトリ内のすべての通常ファイルが処理対象になります。Chapter 10, Mapfiles in the Link-Editor in Oracle Solaris 11.4 Linkers and Libraries Guideを参照してください。マップファイルの例は、/usr/lib/ld にあります。「ファイル」も参照してください。

–o outfile
–-output outfile

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

–p auditlib

監査ライブラリ auditlib を識別します。このライブラリは、作成されたオブジェクトの実行時に行われる監査に使用されます。自分自身の監査を行うような共有オブジェクトと依存関係にあるオブジェクトは、この共有オブジェクトの性質を継承し、自分自身の監査を行います (–P オプションを参照)。Runtime Linker Auditing Interface in Oracle Solaris 11.4 Linkers and Libraries Guideも参照してください。

–P auditlib

監査ライブラリ auditlib を識別します。このライブラリは、作成されたオブジェクトの実行時に行われる依存関係の監査に使用されます。この監査は、このオブジェクトと依存関係にあり、監査を行う必要があるオブジェクトから継承される場合もあります–p オプションと –z globalaudit オプションを参照してください。Runtime Linker Auditing Interface in Oracle Solaris 11.4 Linkers and Libraries Guideも参照してください。

–Q y | n

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

–r
–-relocatable

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

–R path
–rpath path

複数のディレクトリをコロンで区切って指定します。このリストは、実行時リンカーにライブラリ検索ディレクトリを指定する際に使用されます。NULL 以外のパスは、出力オブジェクトファイルに記録され、実行時リンカーによって使用されます。このオプションを複数回指定する場合と、コロンで区切って path を指定する場合の結果は同じになります。Directories Searched by the Runtime Linker in Oracle Solaris 11.4 Linkers and Libraries Guideを参照してください。

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

また、runpath で提供されるさまざまなトークンを使用すると、システムの機能やオブジェクトの位置を柔軟に識別できます。Chapter 12, Establishing Dependencies with Dynamic String Tokens in Oracle Solaris 11.4 Linkers and Libraries Guideを参照してください。$ORIGIN トークンは、動的オブジェクトをファイルシステム内の別の場所に再配置できるようにする場合に特に役立ちます。

–s
–-strip-all

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

–S supportlib

リンカーによって共有オブジェクト supportlib がロードされ、リンクプロセスに関する情報が提供されます。–S オプションを使用して定義された共有オブジェクトは、SGS_SUPPORT 環境変数を使用して提供することもできます。Link-Editor Support Interface in Oracle Solaris 11.4 Linkers and Libraries Guideを参照してください。

–u symname
–-undefined symname

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

–V
–-version

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

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

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

–z ancillary[=outfile]

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

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

–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.debug*.line.stab*.SUNW_ctf、または .zdebug* セクション名を持っていることによって識別されます。また、これらのセクションは、SHT_PROGBITS または SHT_SUNW_DEBUG* セクションタイプを指定することでも識別されます。

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

–z deferred | nodeferred

遅延としての動的依存関係の識別を有効または無効にします。遅延依存関係に結合されたシンボル参照は、遅延参照と呼ばれます。遅延依存関係は、遅延ロード可能として識別された依存関係と同様に動作し、初期プロセスの起動時にはロードされません。遅延依存関係の読み込みは、そのレイジー参照への結合がはじめて行われたときに行われます。

標準のシンボル参照とは異なり、遅延シンボル参照は、標準の再配置処理 (LD_BIND_NOW 処理) の一部として、または RTLD_NOW フラグを指定した dlopen(3C) では処理されません。遅延参照は関数呼び出しに対してのみ確立でき、関連付けられた依存関係に直接結合されます。

遅延依存関係を dlsym(3C) および RTLD_PROBE ハンドルとともに使用すると、自然なコーディングスタイルを使用して柔軟なメカニズムで機能テストを実行できます。Testing for Functionality in Oracle Solaris 11.4 Linkers and Libraries GuideおよびProviding an Alternative to dlopen in Oracle Solaris 11.4 Linkers and Libraries Guideを参照してください。

–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,...
–-gc_sections | –-no-gc-sections

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

sections

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

files

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

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

dependencies

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

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

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

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

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

none

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

GNU リンカーとの互換性のため、–-gc-sections–z discard-unused=sections の同義語として受け入れられます。–-no-gc-sections オプションは、–z discard-unused=sections または –-gc-sections の以前の使用をキャンセルしますが、それ以外の場合は何の効果も持ちません。

Removing Unused Material in Oracle Solaris 11.4 Linkers and Libraries Guideも参照してください。

–z endfiltee

フィルタによって処理された場合、そのフィルタによるそれ以上の filtee 検索を filtee がすべて終了するように filtee を識別します。Reducing Capability Filtee Searches in Oracle Solaris 11.4 Linkers and Libraries Guideを参照してください。

–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 を指すように初期化されます。Initialization and Termination Sections in Oracle Solaris 11.4 Linkers and Libraries Guideを参照してください。

–z globalaudit

このオプションは、–P オプションを使用して記録された監査ライブラリの定義を補足します。このオプションは、実行可能ファイルの作成時にのみ使用できます。–P オプションを使用してオブジェクト内で定義された監査ライブラリを使用すると、通常、そのオブジェクトの直接の依存関係を監査できます。 –z globalaudit は、監査者をグローバルな監査者に昇格させることによって、すべての依存関係を監査できるようにします。Invoking the Auditing Interface in Oracle Solaris 11.4 Linkers and Libraries Guideを参照してください。

–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 で無効にできます。

Removing Unused Material in Oracle Solaris 11.4 Linkers and Libraries Guideも参照してください。

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

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

Removing Unused Material in Oracle Solaris 11.4 Linkers and Libraries Guideも参照してください。

レイジーロード

また、共有オブジェクトの依存関係はレイジーロード用として識別する必要があります。ガイダンスでは、–z lazyload または –z nolazyload オプションが出現する前にすべての依存関係が処理される場合、–z lazyload オプションの使用を推奨しています。このガイダンスは、–z guidance=nolazyload で無効にできます。

直接結合

動的オブジェクトの依存関係は、直接結合で参照するべきです。ガイダンスでは、–B direct–z direct オプションのどちらか、または –z nodirect オプションが出現する前に依存関係が処理される場合、B direct と z direct のどちらかのオプションの使用を推奨しています。このガイダンスは、–z guidance=nodirect で無効にできます。

ピュアテキストセグメント

動的オブジェクトでは、書き込み不可で割り当て可能なセクションに再配置を行なってはいけません。そのような再配置が存在していて、かつ –z textoff オプションを使用しない場合、ガイダンスが提供されます。

共有オブジェクトや位置独立実行可能ファイルの作成時にこの条件が成立するのは、通常、位置独立でないコードを含む入力ファイルが使用された場合です。動的実行可能ファイルの作成時にこの条件が成立するのは、通常、未解決の弱い参照が存在している場合です。このガイダンスは、–z guidance=notext で無効にできます。

Mapfile の構文

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

マップファイルシンボルマッチング

寿命の長い安定した ABI の確立を意図している名前付きバージョンの中では、マップファイルで MATCH 式を使用しないようにしてください。ガイダンスでは、名前付きバージョン内のすべてのシンボル名を明示的に一覧表示することを推奨しています。このガイダンスは –z guidance=nomapfile-symbol-match で無効にできます。

ライブラリ検索パス

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

カーネルモジュールの明示的な指定

カーネルモジュールの構築には –z type=kmod オプションを使用するようにしてください。これまで、カーネルモジュールはリンカーの –r および –dy オプションを使用して構築されていました。この古い形式はあいまいで、機能でも劣っています。このガイダンスは –z guidance=nokmod で無効にできます。

別名を付けたシンボルの回避

動的オブジェクトは、アドレスをシンボル名に効率的にマップするために、デバッガやその他の可観測性ツールによって使用されるシンボルソートセクションを使用して構築されます。このようなツールでは、同じ値を持つ複数のシンボルが存在すると、一貫性のない結果が表示される場合があります。別名を付けたシンボルは、コードを改訂することによって回避できます。または、NOSORTSYM mapfile ディレクティブを使用すると、ソートセクションに望ましくない別名が配置されることを手動で回避できます。このガイダンスは、–z guidance=nosymalias で無効にできます。

また、–z guidance=noall でガイダンス機能をすべて無効にできます。より適切なオブジェクトを構築するためのガイダンスとアドバイスについての詳細は、Chapter 5, Link-Editor Quick Reference in Oracle Solaris 11.4 Linkers and Libraries Guideを参照してください。

–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 を指すように初期化されます。Initialization and Termination Sections in Oracle Solaris 11.4 Linkers and Libraries Guideを参照してください。

–z initfirst

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

–z interpose

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

–z lazyload | nolazyload

遅延してロードされる動的依存関係の識別を有効または無効にします。lazyload として識別された動的依存関係は、初期プロセスの起動時にはロードされません。オブジェクトの読み込みは、はじめてこのオブジェクトへの結合が行われたときに行われます。


注 - レイジーロードには、正しい依存関係宣言と、プロセス内で使用される動的オブジェクトごとに関連する実行パスが必要です。Lazy Loading of Dynamic Dependencies in Oracle Solaris 11.4 Linkers and Libraries Guideを参照してください。
–z ld32=arg1,arg2,...
–z ld64=arg1,arg2,...

–z 32 および –z 64 オプションは、それぞれ 32 ビットまたは 64 ビットのリンカーの実行時にのみ解釈するオプションを指定するために使用されます。

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

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

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

–z loadfltr

filtee を実行時にただちに処理する必要があることを示すようにフィルタを識別します。通常、フィルタ処理は、シンボル参照がフィルタに結合されたときにはじめて行われます。このフラグを持つオブジェクトの実行時プロセスは、環境変数 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 入力を条件に応じて処理できます。Chapter 10, Mapfiles in the Link-Editor in Oracle Solaris 11.4 Linkers and Libraries Guideを参照してください。

–z nodelete

オブジェクトを実行時に削除不可能として識別します。このモードは、dlopen(3C)RTLD_NODELETE モードとともに使用してプロセスにオブジェクトを追加する場合と同様です。

–z nodlopen

オブジェクトを、dlopen() によって指定されたオブジェクト、または dlopen() によって指定されたオブジェクトに必要ないずれかの形式の依存関係のどちらとしても dlopen(3C) から使用不可能として識別します。このオプションは共有オブジェクトの作成時にのみ有用です。

–z parent=object

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

–z preinitarray=function

構築するオブジェクトの .preinit_array セクションにエントリを追加します。.preinit_array セクションが存在しない場合は、1 つのセクションを新たに作成します。追加されたエントリは function を指すように初期化されます。Initialization and Termination Sections in Oracle Solaris 11.4 Linkers and Libraries Guideを参照してください。

–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 の使用時に必要となります。スタブオブジェクトの作成時には、リンカーはコマンド行で指定されているオブジェクトとライブラリファイルをすべて無視するため、スタブを作成するためにこれらのファイルが存在している必要はありません。コンパイル手順が省略でき、リンカーの作業が比較的少ないため、スタブオブジェクトはすぐに作成できます。

リンカーとライブラリガイド』の「スタブオブジェクト」を参照してください。

–z sx=extension[=mode],...

オブジェクトごとのセキュリティー拡張を指定します。モード値は、enable または disable に設定できます。モードを省略した場合、拡張は有効になります。このオプションは複数回指定できますが、このオプションは、実行可能ファイルの作成時にのみ使用できます。sxadm(8) を参照してください。

次のセキュリティー拡張を指定できます。

aslr

プロセスの ASLR (アドレス空間レイアウトのランダム化) の要件を指定します。

nxheap

プロセスの実行不能ヒープ (NXHEAP) の要件を指定します。

nxstack

プロセスの実行不能スタック (NXSTACK) の要件を指定します。

adiheap

プロセス内のメモリーアロケータに対する Application Data Integrity (ADI) 要件を指定します。

adistack

プロセスの ADI (アプリケーションデータ整合性) スタック保護の要件を指定します。


注 - セキュリティー拡張を無効にすることの指定は常に、プロセスの実行時に受け付けられます。セキュリティー拡張を有効にすることの指定は、基礎となるシステムがその拡張を提供している場合にのみ受け付けられます。そうでない場合、セキュリティー拡張の要求は暗黙的に無視されます。
–z symbolcap

オブジェクトの機能を定義する再配置可能オブジェクトを、シンボルの機能を定義する再配置可能オブジェクトに変換します。Converting Object Capabilities to Symbol Capabilities in Oracle Solaris 11.4 Linkers and Libraries Guideを参照してください。

–z sysroot=dir
–-sysroot=dir

システムルートディレクトリを指定します。デフォルトでは、デフォルト検索パスや、–L または –YP オプションで指定したディレクトリは、システムルートディレクトリ / からの相対パスとして解釈されます。–z sysroot を指定した場合、これらのパスは代わりにその指定したディレクトリからの相対パスとみなされます。–L および –YP オプション、および「ファイル」の LIBPATH を参照してください。–z sysroot–z target と組み合わせて使用すれば、現在実行中のシステムとは異なるターゲット向けのオブジェクトを作成できます。

–z target=sparc | x86

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

–z text | textoff | textwarn

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

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

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

–z type=object-type

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

exec

動的実行可能ファイル。

kmod

カーネルモジュール。

pie

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

reloc

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

shared

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

–z verbose

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

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

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

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

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

–z wrap=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 関数を呼び出します。

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

–?
–-help

使用法に関するメッセージを出力したあと、すぐに終了します。

セカンダリオプション

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

–a

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

–b

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

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

–B group

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

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

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

–B symbolic | symbolic-functions

これらのオプションは共有オブジェクトの作成時にのみ使用可能です。–B symbolic オプションを指定すると、グローバルシンボルの参照が、構築中のオブジェクト内の定義に結合されるようになります (定義が存在する場合)。–B symbolic-functions は、この結合を関数シンボルに限定します。

通常、共有オブジェクト内のグローバルシンボルへの参照は、そのシンボルの定義が共有オブジェクト内に存在するかどうかにかかわらず、実行時まで結合されません。このモデルでは、実行可能ファイルやほかの共有オブジェクトに含まれる同じシンボルの定義で、そのオブジェクト自体の定義をオーバーライドできます。

–B symbolic オプションは、特殊化された動的オブジェクトを対象としているため、一般的な用途に使用することはお勧めしません。これらのオプションを使用すると、実行時の再配置のオーバーヘッドを削減できますが、割り込みを想定している結合に悪影響を与える可能性があります。実行時の再配置処理を削減するには、これらのオプションを使用するよりも、バージョン定義の作成または直接結合の使用をお勧めします。


注 - マップファイルを使用すると、シンボルの可視性を定義したり再配置のオーバーヘッドを変更したりするよりも、高い柔軟性が得られます。SYMBOL_SCOPE and SYMBOL_VERSION Directives in Oracle Solaris 11.4 Linkers and Libraries Guideを参照してください。
–d y | n

–d y が指定されている場合 (デフォルト)、リンカーは動的リンクを使用します。–d n が指定されている場合、リンカーは静的リンクを使用します。これらのオプションやリンカーの動作モードは、通常は –z type–r–G といったより高レベルのオプションによって制御されます。「機能説明」の「静的実行可能ファイル」および –B dynamic | static も参照してください。

–I name
–-dynamic-linker name

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

–N string

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

–t

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

–Wl,option

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

–YP,dirlist

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

–z absexec

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

–z altexec64

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

–z aslr[=mode]

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

–z combreloc | nocombreloc

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

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

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

–z gnu-version-script=mapfile
–z gnu-version-script-compat
–-version-script mapfile

GNU のバージョンスクリプト形式のマップファイルを部分的にサポートします。バージョンスクリプトは最初の Solaris バージョン 1 のシンボル定義構文に基づいており、いくつかの拡張も含んでいます。もっとも一般的な拡張はシンボル名の指定にワイルドカード文字を使用することで、ld はこれをサポートしています。ほかの GNU 固有の拡張はサポートされていない場合があります。サポートされていない拡張が見つかった場合、ld は該当するエラーを発行します。

GNU のバージョンスクリプトで開発されたソフトウェアの構築に便利になるように、ネイティブ GNU の –-version-script オプションが –z gnu-version-script の別名として受け入れられます。GNU のバージョンスクリプトのサポートは部分的なものなので、–z gnu-version-script-compat を指定することにより、–-version-script の使用を明示的に有効にする必要があります。

–z groupperm | nogroupperm

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

–z muldefs
–-allow-multiple-definition

グローバルなシンボル定義の重複を許容します。デフォルトでは、再配置可能オブジェクト間で重複したシンボル定義が発生すると、致命的なエラーになります。このオプションを指定すると、エラーにはならずに、最初の定義が有効な定義として使用されます。特殊なコンパイラオプションまたはコンパイラの高度な最適化を使用することで、このオプションの使用を回避できます。Fatal Resolutions in Oracle Solaris 11.4 Linkers and Libraries Guideを参照してください。

–z nocompstrtab

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

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

–z nodefaultlib

いずれかの LD_LIBRARY_PATH または runpath のあとに使用される実行時のデフォルトライブラリ検索パスが無視されるようにオブジェクトを識別します。このように指定すると、すべての依存オブジェクトが実行パスを使用することになります。

–z nodump

このオプションは従来、オブジェクトを dldump(3C) から使用不可能として識別するために使用されました。–z nodump オプションは受け入れられますが、このオプションは不必要で効果はありません。

–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 noversion

バージョン管理情報を削除します。バージョンセクションまたは関連する .dynamic セクションのエントリは、出力イメージ内に生成されません。

–z now

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

–z nxheap[=mode]

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

–z nxstack[=mode]

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

–z origin

オブジェクトを実行時に即座の $ORIGIN 処理が必要として識別します。この動作は現在はデフォルトです。このオプションは、従来機能との互換性のためにのみ残されています。

–z redlocsym
–x
–-discard-all

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

サイズやアラインメントの異なる多重定義の暫定的なデータシンボルがあると、警告が生成されます。一般に、このような状況は Fortran の共通ブロックから発生します。–z relax=common オプションは、この警告を無効にします。

secadj

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

symbound

シンボルがその関連セクションの境界を越えるデータを参照すると、無効なメモリーアクセスになることがあります。そのようなシンボルがあると、致命的なエラーが発生します。–z relax=symbound オプションは、このエラー条件を抑制します。

transdisp

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

transtls

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

–z relaxreloc

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

–z rescan

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

環境変数

リンカーでは、次の環境変数が認識されます。実行時リンカーでは、LD_ という接頭辞の付いた追加の環境変数も使用できます。ld.so.1(1) を参照してください。

LD_ALTEXEC

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

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

Oracle Solaris 11.4 より前は、実行されるリンカーのクラスは、ベースとなるシステムのクラスによって 32 ビットか 64 ビットに決まっていました。64 ビットのリンカーが自動的には実行されないようにするには、LD_NOEXEC_64 環境変数を使用していました。現在のシステムでは、リンカーは常に 64 ビットになり、LD_NOEXEC_64 は無視され、効果はありません。この変数は、旧バージョンの Solaris との下位互換性を保つために残されています。

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

これらの環境変数を使えば、リンカーコマンド行に対して別のオプションの追加や既存オプションの削除を行えます。object-type は、大文字で、–z type オプションによって定義されているタイプを指定します。したがって、次の object-type オプションを使用できます。

  • LD_EXEC_UNSET および LD_EXEC_OPTIONS

  • LD_KMOD_UNSET および LD_KMOD_OPTIONS

  • LD_PIE_UNSET および LD_PIE_OPTIONS

  • LD_RELOC_UNSET および LD_RELOC_OPTIONS

  • LD_SHARED_UNSET および LD_SHARED_OPTIONS

「オプションの処理」を参照してください。

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(7) を参照してください。

属性タイプ
属性値
使用条件
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), dldump(3C), zlib(3), dlopen(3C), elf(3ELF), ar.h(3HEAD), a.out(5), attributes(7), sxadm(8)

OracleSolaris 11.4 リンカーとライブラリガイド

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

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

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