日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.4-RELEASE-K, 13.0-RELEASE-K から 13.3-RELEASE-K, 14.0-RELEASE-K から 14.1-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
LD(1) GNU Development Tools LD(1) 名称 ld - GNU リンカ 書式 ld [options] objfile ... 解説 ld は、多くのオブジェクトとアーカイブを結合し、それらのデータをリロケー ション (再配置) し、シンボルの参照を結びつけます。通常、プログラムのコ ンパイルの最後のステップは、ld を実行することです。 ld は、リンクプロセスを越えて明示的で、総合制御を提供するために、AT&T のリンクエディタコマンド言語構文のスーパセットで書かれたリンカコマンド 言語ファイルを受け付けます。 このマニュアルページは、コマンド言語を説明していません。コマンド言語と GNU リンカの他の局面での完全な詳細については、"info" の ld エントリを参 照してください。 ld のこのバージョンは、オブジェクトファイルを操作する汎用の BFD ライブ ラリを使用します。これによって、ld は、多くの異なる形式 --- 例えば、 COFF または "a.out"、のオブジェクトファイルを読み込み、結合と書き込むこ とができます。異なった形式は、あらゆる利用可能な種類のオブジェクトファ イルを生成するために一緒にリンクされます。 その柔軟性に加えて、GNU リンカは、診断情報の提供することで他のリンカよ り役に立ちます。多くのリンカは、エラーに遭遇するとすぐに実行を断念しま す。可能であるならいつでも、ld は、利用者が他のエラーを識別することを可 能にして、(またはある場合に、エラーにもかかわらず出力ファイルを取得する ために) 実行を続けます GNU リンカ ld は、状況の広い範囲をカバーし、他のリンカとできる限り互換 性があるように作られています。結果として、利用者は、その振る舞いを制御 する多くの選択肢があります。 オプション リンカは、多量のコマンド行オプションをサポートしますが、実際に、それら の慣習は、あらゆる個々の状況でほとんど使用されません。例えば、ld で頻繁 に使用されるものは、標準にサポートされた Unix システムの、標準の Unix オブジェクトファイルをリンクすることです。そのようなシステムで、ファイ ル "hello.o" をリンクするためには、次の通りです: ld -o <output> /lib/crt0.o hello.o -lc これは、"hello.o" と標準の検索ディレクトリに由来するライブラリ "libc.a" でファイル "/lib/crt0.o" をリンクする結果として output と呼ばれるファイ ルを生成するように ld に伝えます。(下記の -l オプションの議論を参照して ください。) ld へのコマンド行オプションのいくつかは、コマンド行のどの時点でも指定で きます。しかしながら、-l または -T のようなファイルを参照するオプション によって、オブジェクトファイルと他のファイルオプションと関連してオプ ションがコマンド行に現れる時点でファイルを読み込みます。異なる引数があ るファイルでないオプションを繰り返すことは、さらなる効果がないか、また は (それらがコマンド行のさらに左にある) そのオプションの前の存在を上書 きします。複数回指定された意味のあるオプションは、以下に説明で注記され ています。 オプションでない引数は、ともにリンクされたオブジェクトファイルまたは アーカイブです。それらは、オブジェクトファイルの引数がオプションとその 引数の間に置かれないことを除いて、コマンド行オプションに続く、前に、ま たは混在することができます。 通常、リンカは、すくなくとも 1 つのオブジェクトファイルで呼び出されます が、利用者は、-l、-R とスクリプトコマンド言語を使用してバイナリの入力 ファイルの他の形式を指定することができます。バイナリの入力ファイルが まったく指定されないなら、リンカは、何も出力も生成せず、メッセージ No input files (入力ファイルがない) を出します。 リンカがオブジェクトファイルの形式を認識することができないなら、それが リンカスクリプトであると仮定します。このように指定されたスクリプトは、 リンクのために使用された主要なリンカスクリプト (デフォルトのリンカスク リプトまたは -T を使用して指定されたもの) を増加します。この機能は、リ ンカが、オブジェクトまたはアーカイブが現れるファイルに対してリンクする ことを許可しますが、実際、単にいくつかのシンボル値を定義するか、または 他のオブジェクトをロードするために、"INPUT" または "GROUP" を使用しま す。このようにスクリプトを指定することは、主要なリンカスクリプトが単に 増加することに注意してください。デフォルトのリンカスクリプトを完全に置 き換える -T オプションを使用します。 名前が単一の文字であるオプションについて、オプション引数は、空白類を間 に入れずにオプション文字に続いているか、またはそれらを必要とするオプ ションに直ちに続いている個別の引数として与えられるかのいずれかでなけれ ばなりません。 名前が複数の文字であるオプションについて、1 つのダッシュまたは 2 つの ダッシュのどちらも、オプション名に先行します。例えば、-trace-symbol と --trace-symbol は、同等です。注 --- この規則に 1 つの例外があります。小 文字 'o' で始まる複数の文字のオプションは、2 つのダッシュのみ先導するこ とができます。これは、-o オプションとの混乱を少なくするためです。それ で、例えば、--omagic が出力で NMAGIC フラグを設定するのに対して、 -omagic は、出力ファイル名を magic に設定します。 複数の文字のオプションへの引数は、等号によってオプション名から区切られ るか、またはそれらを必要とするオプションに直ちに続いている個別の引数と して与えられるかのいずれかでなければなりません。例えば、--trace-symbol foo と --trace-symbol=foo は、同等です。複数の文字のオプションの名前の ユニークな短縮形は、受け付けられます。 注 --- リンカがコンパイラドライバ (例えば、gcc) によって間接的に呼び出 されるなら、すべてのリンカコマンド行のオプションは、-Wl, が (または特定 のコンパイラドライバに適切であるものは何でも) 前に付けられるべきです。 gcc -Wl,--startgroup foo.o bar.o -Wl,--endgroup そうでなければ、コンパイラドライバのプログラムがリンカのオプションを静 かに落とすかもしれず、不正なリンクの結果となるので、これは、重要です。 ここに、GNU リンカによって受け付けられる一般的なコマンド行のスイッチの 表を示します: @file file からコマンド行のオプションを読み込みます。読み込まれたオプショ ンは、オリジナルの @file オプションの場所に代わって挿入されます。 file が存在しないか、または読み込むことができないなら、オプション は、文字通りに扱われ、取り除かれません。 file 中のオプションは、空白類によって分離されます。空白類の文字は、 シングルクォートまたはダブルクォートのいずれかで全体のオプションを 囲むことによって、オプションに含めることができます。(バックスラッ シュを含む) 任意の文字は、バックスラッシュを文字を前に置くことに よって、含めることができます。file は、それ自体に、追加の @file オ プションを含むことができます。そのようなオプションは、再帰的に処理 されます。 -akeyword このオプションは、HP/UX との互換性のためにサポートされています。 keyword 引数は、文字列 archive、shared または default の 1 つでなけ ればなりません。-aarchive は、機能的に -Bstatic と同等で、他の 2 つ のキーワードは、機能的に -Bdynamic と同等です。このオプションは、何 度も使用することができます。 -Aarchitecture --architecture=architecture ld の現在のリリースで、このオプションは、アーキテクチャの Intel 960 ファミリだけのために役に立ちます。その ld 設定において、 architecture 引数は、960 のファミリの特定のアーキテクチャを識別し、 いくつかの保護手段を有効にし、アーカイブライブラリの検索パスを修正 します。 ld の将来のリリースは、他のアーキテクチャファミリのための同様の機能 をサポートするかもしれません。 -b input-format --format=input-format ld は、複数の種類のオブジェクトファイルをサポートするように設定され ます。利用者の ld がこの方法で設定されるなら、利用者は、コマンド行 の、このオプションに続いている入力オブジェクトファイルに対してバイ ナリ形式を指定するために -b オプションを使用することができます。ld が、代替のオブジェクト形式をサポートするように設定されるときでさ え、利用者は、通常、ld が、各マシンで最も一般的な形式であるデフォル トの入力形式として、期待されるように設定されるべきであるように、こ れを指定する必要はありません、input-format (入力形式) は、BFD ライ ブラリによってサポートされた特別の形式の名前である、テキスト文字列 です。(利用者は、objdump -i で利用可能なバイナリ形式をリストするこ とができます。) 利用者は、通常でないバイナリ形式とリンクするなら、このオプションを 使用したいでしょう。また、利用者は、特別の形式のオブジェクトファイ ルの各グループの前に、-b input-format を含めることによって、(異なっ た形式のオブジェクトファイルをリンクするとき) 明示的に切り替えるた めに -b を使用することができます。 デフォルトの形式は、環境変数 "GNUTARGET" から取られます。 また、利用者は、コマンド "TARGET" を使用して、スクリプトから入力形 式も定義することができます。 -c MRI-commandfile --mri-script=MRI-commandfile MRI によって製作されたリンカとの互換性のために、ld は、GNU ld 文書 の MRI 互換スクリプトファイル (Compatible Script Files) セクション に記述されている、代替の制限されたコマンド言語で書かれたスクリプト ファイルを受け付けます。オプション -c で MRI スクリプトファイルを導 入します。汎用の ld スクリプト言語で書かれたリンカスクリプトを実行 するためには、-T オプションを使用します。MRI-commandfile が存在しな いなら、ld は、あらゆる -L オプションによって指定されたディレクトリ でそれを検索します。 -d -dc -dp これらの 3 つのオプションは、同等です。複数の形式が、他のリンカとの 互換性のためにサポートされています。たとえ再配置 (リロケーション) 可能な出力ファイルが (-r で) 指定されても、それらは、コモンシンボル に空間を割り当てます。スクリプトコマンド "FORCE_COMMON_ALLOCATION" には、同じ効果があります。 -e entry --entry=entry デフォルトのエントリポイントではなく、利用者のプログラムの実行を開 始するための明示的なシンボルとして、entry を使用します。entry と名 前が付けられたシンボルがないなら、リンカは、数値として entry を解析 しようと試み、エントリアドレスとしてそれを使用します (数字は、基数 を 10 として解釈されます。先導する 0x は、16 を基数とすることを表 し、0 は、8 を基数とすることを表します)。 --exclude-libs lib,lib,... シンボルが自動的にエクスポートされるべきでないアーカイブライブラリ のリストを指定します。ライブラリ名は、コンマまたはコロンによって区 切られます。自動的にエクスポートされたすべてのアーカイブライブラリ のシンボルを除いて、"--exclude-libs ALL" を指定します。このオプショ ンは、リンカの i386 PE をターゲットとするポートと ELF をターゲット とするポートのためだけに利用可能です。i386 PE に関して、このオプ ションにかかわらず、.def ファイルに明白にリストされたシンボルは、そ れでもエクスポートされます。ELF をターゲットとするポートに関して、 このオプションによって影響するシンボルは、隠されるように扱われま す。 -E --export-dynamic 動的にリンクされた実行形式を作成するとき、すべてのシンボルを動的な シンボルテーブルに追加します。動的なシンボルテーブルは、実行時に動 的なオブジェクトから見えるシンボルの組です。 利用者がこのオプションを使用しないなら、動的なシンボルテーブルは、 通常、リンクで言及されたいくつかの動的なオブジェクトによって参照さ れる、それらのシンボルだけを含みます。 利用者がいくつかの他の動的なオブジェクトでなく、プログラムによって 定義されたシンボルにに戻って参照する必要がある動的なオブジェクトを ロードするために、"dlopen" を使用するなら、利用者は、プログラム自体 をリンクするとき、たぶん、このオプションを使用する必要があります。 出力形式が動的なリストをサポートするなら、どのようなシンボルが動的 なシンボルテーブルに加えられるべきであるかを制御するために動的なリ ストを使用することもできます。--dynamic-list の説明を参照してくださ い。 -EB ビッグエンディアンのオブジェクトをリンクします。これは、デフォルト 出力形式に影響します。 -EL リトルエンディアンのオブジェクトをリンクします。これは、デフォルト 出力形式に影響します。 -f --auxiliary name ELF 共有オブジェクトを作成するとき、内部の DT_AUXILIARY フィールド を指定された name (名前) に設定します。これは、共有オブジェクトのシ ンボルテーブルが、共有オブジェクト name のシンボルテーブルの補助の フィルタとして使用されるべきであることを動的なリンカに伝えます。 後で利用者がこのフィルタオブジェクトに対してプログラムをリンクする なら、利用者がプログラムを実行するとき、動的なリンカは、 DT_AUXILIARY フィールドを調べます。動的なリンカは、フィルタオブジェ クトからあらゆるシンボルを解決するなら、最初に、共有オブジェクト name に定義があるかどうかをチェックします。それがあるなら、フィルタ オブジェクトの定義の代わりに使用されます。共有オブジェクト name は、存在する必要はありません。したがって、共有オブジェクト name は、おそらくデバッグまたはマシン特有の性能のための特定の関数の代替 の実装を提供するために使用されます。 このオプションは、複数回指定することができます。DT_AUXILIARY エント リは、コマンド行にそれらが現れる順序で作成されます。 -F name --filter name ELF 共有オブジェクトを作成するとき、内部の DT_FILTER フィールドを指 定された name (名前) に設定します。これは、作成されている共有オブ ジェクトのシンボルテーブルが、共有オブジェクト name のシンボルテー ブルのフィルタとして使用されるべきであることを動的なリンカに伝えま す。 後で利用者がこのフィルタオブジェクトに対してプログラムをリンクする なら、利用者がプログラムを実行するとき、動的なリンカは、DT_FILTER フィールドを調べます。動的なリンカは、いつものように、フィルタオブ ジェクトのシンボルテーブルににしたがってシンボルを解決しますが、そ れは、実際、共有オブジェクト name に見つかった定義にリンクする。し たがって、オブジェクト name によって提供されたシンボルのサブセット を選択するためにフィルタオブジェクトを使用することができます。 いくつかの古いリンカは、入力と出力の両方のオブジェクトファイルのた めのオブジェクトファイル形式を指定するためのコンパイルのツール チェーン (toolchain) を通して -F オプションを使用しました。GNU リン カは、この目的のために他のメカニズムを使用します: -b、--format、 --oformat オプション、リンカスクリプトの "TARGET" コマンドと "GNUTARGET" 環境変数。GNU リンカは、ELF 共有オブジェクトを作成しな いとき、-FF オプションを無視します。 -fini name ELF 実行形式または共有オブジェクトを作成するとき、実行形式または共 有オブジェクトが、関数のアドレスに DT_FINI を設定することによって、 アンロードするとき、NAME を呼び出します。デフォルトで、リンカは、呼 び出される関数として "_fini" を使用します。 -g 無視されます。他のツールとの互換性のために提供されています。 -Gvalue --gpsize=value GP レジスタを使用して最適化されるオブジェクトの最大のサイズを size に設定します。これは、大きいオブジェクトと小さいオブジェクトを異 なったセクションに置くことをサポートする MIPS ECOFF のようなオブ ジェクトファイル形式のためだけに意味があります。これは、他のオブ ジェクトファイル形式に対して無視されます。 -hname -soname=name ELF 共有オブジェクトを作成するとき、内部の DT_SONAME フィールドを指 定された name (名前) に設定します。実行形式が、DT_SONAME フィールド がある共有オブジェクトとリンクされるとき、そして、実行形式が実行さ れるとき、動的リンカは、リンカに与えられたファイル名を使用するので はなく、DT_SONAME フィールドによって指定された共有オブジェクトを ロードすることを試みます。 -i インクリメンタルリンク (incremental link) を実行します (オプション -r と同じです)。 -init name ELF 実行形式または共有オブジェクトを作成するとき、実行形式または共 有オブジェクトが、関数のアドレスに DT_INIT を設定することによって、 ロードするとき、NAME を呼び出します。デフォルトで、リンカは、呼び出 される関数として "_init" を使用します。 -lnamespec --library=namespec リンクするためのファイルのリストに namespec によって指定されたアー カイブまたはオブジェクトファイルを追加します。このオプションは、い くつでも使用することができます。namespec が :filename の形式である なら、ld は、filename と呼ばれるファイルのためのライブラリパスを検 索し、そうでなければ、libnamespec.a と呼ばれるファイルのためのライ ブラリパスを検索します。 共有ライブラリをサポートするシステムでは、ld は、libnamespec.a 以外 のファイルも検索するかもしれません。具体的に、ELF と SunOS システム では、ld は、libnamespec.a と呼ばれるファイルを検索する前に、 libnamespec.so と呼ばれるライブラリのためのディレクトリを検索しま す。(慣例により、".so" 拡張子は、共有ライブラリを示します。) この振 る舞いは、常に filename と呼ばれるファイルを指定する、:filename に 適用されないことに注意してください。 リンカは、コマンド行で、それが指定される位置で 1 度だけアーカイブを 検索します。アーカイブが、コマンド行のアーカイブの前に現れるいくつ かのオブジェクトで未定義であったシンボルを定義するなら、リンカは、 アーカイブから適切な (複数の) ファイルを読み込みます。しかしなが ら、コマンド行で後に現れるオブジェクトの未定義なシンボルによって、 リンカは、再びアーカイブを検索しません。 アーカイブを複数回検索するようにリンカに強制する方法については、-( オプションを参照してください。 利用者は、コマンド行に複数回同じアーカイブをリストできます。 このタイプのアーカイブ検索は、Unix リンカでは標準です。しかしなが ら、利用者が AIX の ld を使用しているなら、それは、AIX リンカの振る 舞いと異なることに注意してください。 -Lsearchdir --library-path=searchdir ld がアーカイブライブラリを検索し、ld がスクリプト制御する、パスの リストに searchdir を追加します。利用者は、何度もこのオプションを使 用することができます。ディレクトリは、コマンド行で指定される順序で 検索されます。コマンド行において指定されたディレクトリは、デフォル トのディレクトリの前に検索されます。すべて -L オプションは、オプ ションが現れる順序を無視して、すべての -l オプションに適用します。 searchdir が "=" で始まるなら、"=" は、リンカが設定されるとき指定さ れたパス sysroot prefix に置き換えられます。 (-L で指定されない) 検索されるパスのデフォルトの組は、エミュレー ションモードの ld が使用していて、また、ある場合には、どのようにそ れが設定されたか、に依存します。 また、"SEARCH_DIR" コマンドがあるリンクスクリプトでパスを指定するこ とができます。このように指定されたディレクトリは、リンカスクリプト がコマンド行に現れる時点で検索されます。 -memulation emulation リンカをエミュレートします。利用者は、--verbose または -V オプションで利用可能なエミュレーションをリストすることができます。 -m オプションが使用されないなら、エミュレーションは、"LDEMULATION" 環境変数が定義されているなら、そこから取られます。 そうでなければ、デフォルトのエミュレーションは、どのようにリンカが 設定されていたかに依存します。 -M --print-map 標準出力にリンクマップを印刷 (表示) します。リンクマップは、次を含 んで、リンクに関する情報を提供します: • オブジェクトファイルがメモリのどこにマップされか。 • 共通シンボルがどのように割り付けられるか。 • アーカイブメンバを取り込むシンボルの記載された、リンクに含まれ るすべてのアーカイブメンバ。 • シンボルに割り当てられた値。 注 - 値が、同じシンボルの前の値への参照を含む式によって計算され るシンボルは、リンクマップに表示された正しい結果でないかもしれ ません。これは、リンカが中間結果を捨てて、式の最終値を保持する だけだからです。こうした状況では、リンカは、角括弧によって囲ま れた最終値を表示します。従って、例えば、リンカスクリプトは、次 を含みます: foo = 1 foo = foo * 4 foo = foo + 8 これは、-M オプションが使用されるなら、リンクマップで次の出力を 生成します: 0x00000001 foo = 0x1 [0x0000000c] foo = (foo * 0x4) [0x0000000c] foo = (foo + 0x8) リンカスクリプトの表現に関する詳細については、Expressions を参 照してください。 -n --nmagic セクションのページ整列をオフにし、可能であるなら、"NMAGIC" として出 力をマークします。 -N --omagic テキストセクションとデータセクションを読み込み可能で、書き込み可能 となるように設定します。また、データセグメントをページ整列せず、共 有ライブラリに対してリンクを無効にします。出力形式が Unix スタイル のマジックナンバをサポートしているなら、"OMAGIC" として出力をマーク します。注: 書き込み可能なテキストセクションは、PE-COFF ターゲット に対して許可されていますが、Microsoft によって出版された形式仕様に 適合していません。 --no-omagic このオプションは、-N オプションの効果のほとんどを否定します。読み込 み専用となるテキストセクションを設定して、強制的にデータセグメント をページに整列します。注 - このオプションは、共有ライブラリに対して リンクを有効にしません。このためには、-Bdynamic を使用します。 -o output --output=output ld によって生成されたプログラムのための名前として output を使用しま す。このオプションが指定されないなら、名前 a.out が、デフォルトで使 用されます。また、スクリプトコマンド "OUTPUT" は、出力ファイル名を 指定することができます。 -O level level が 0 より大きな数値であるなら、ld は、出力を最適化します。こ れは、きわめて長くそのためたぶん、最終的なバイナリのために有効であ るべきです。 -q --emit-relocs 完全にリンクされた実行形式の再配置 (リロケーション) セクションと内 容を残します。リンク後の解析と最適化ツールは、実行形式の正しい修正 を実行するために、この情報を必要とします。これは、より大きな実行形 式の結果となります。 このオプションは、現在、ELF プラットフォームでのみサポートされま す。 --force-dynamic 強制的に出力ファイルに動的なセクションを持たせます。このオプション は、VxWorks ターゲットに特有です。 -r --relocatable 再配置 (リロケーション) 可能な出力を生成します、--- すなわち、ld の 入力として順番に供給することができる出力ファイルを生成します。これ は、しばしば部分リンク (partial linking) と呼ばれます。副作用とし て、標準の Unix マジックナンバをサポートする環境で、このオプション は、また、出力ファイルのマジックナンバを "OMAGIC" に設定します。こ のオプションが指定されないなら、絶対ファイル (absolute file) が生成 されます。C++ プログラムをリンクするとき、このオプションは、コンス トラクタへの参照を解決しません。それを行うためには、-Ur を使用しま す。 入力ファイルが出力ファイルと同じ形式でないとき、部分リンクは、その 入力ファイルに何も再配置 (リロケーション) を含んでいない場合のみサ ポートされます。異なった出力形式は、さらなる制限があるかもしれませ ん。例えば、いくつかの "a.out" ベースの形式は、他の形式の入力ファイ ルで部分リンクを全くサポートしません。 このオプションは、-i と同じものです。 -R filename --just-symbols=filename filename からシンボル名とそれらのアドレスを読み込みますが、それを再 配置 (リロケーション) せず、出力にそれを含めません。これによって、 利用者の出力ファイルは、他のプログラムで定義されたメモリの絶対的位 置をシンボル表現で参照することができます。利用者は、複数回、このオ プションを使用することができます。 他の ELF リンカとの互換性のために、-R オプションにファイル名ではな くディレクトリ名が続いていなら、-rpath オプションとして扱われます。 -s --strip-all 出力ファイルからすべてのシンボル情報を除外します。 -S --strip-debug 出力ファイルから (すべてのシンボルではなく) デバッガのシンボル情報 を除外します。 -t --trace ld がそれらを処理するときに、入力ファイルの名前を印刷 (表示) しま す。 -T scriptfile --script=scriptfile リンカスクリプトとして scriptfile を使用します。このスクリプトは、 (それに追加するのではなく) ld のデフォルトのリンカスクリプトを置き 換えるので、scriptfile は、出力ファイルを記述するために必要なすべて を指定しなければなりません。scriptfile がカレントディレクトリに存在 しないなら、"ld" は、あらゆる先行する -L オプションによって指定され たディレクトリでそれを検索します。複数の -T オプションは、累積しま す。 -dT scriptfile --default-script=scriptfile デフォルトのリンカスクリプトとして scriptfile を使用します。 このオプションは、コマンド行の残りが処理される後まで、スクリプトの 処理が遅延されることを除いて、--script オプションと同様です。これに よって、コマンド行で --default-script オプションの後に置かれたオプ ションは、ユーザによってリンカコマンド行を直接制御できないとき、重 要となるかもしれない、リンカスクリプトの振る舞いに影響するかもしれ ません。(例えば、コマンド行が gcc のような、別のツールによって設定 されるためです)。 -u symbol --undefined=symbol symbol を未定義シンボルとして出力ファイルに入れることを強制します。 例えば、これを行うことは、標準ライブラリから追加のモジュールのリン クを引き起こします。-u は、追加の未定義シンボルを入れるために、異 なったオプション引数で繰り返されます。このオプションは、"EXTERN" リ ンカスクリプトのコマンドと同等です。 -Ur C++ プログラム以外の何でも、このオプションは、-r と同様です: 再配置 (リロケーション) 可能な出力を生成します --- すなわち ld への入力と して再び供給できる出力ファイルを生成します。C++ プログラムをリンク するとき、-Ur は、-r とは異なり、コンストラクタへの参照を解決を行い ます。それは、-Ur でリンクされたそれら自体であるファイルで -Ur を使 用して動作しません。いったんコンストラクタのテーブルが構築される と、それに追加することはできません。最後の部分的なリンクのためだけ に -Ur を使用し、その他のために -r を使用します。 --unique[=SECTION] SECTION と一致する入力セクションごとに、またはオプションのワイルド カード SECTION 引数が不足しているなら、すべての孤立している入力セク ションごとに、個別の出力セクションを作成します。孤立しているセク ションは、リンカスクリプトで特に言及されなかったものです。利用者 は、コマンド行で、複数回、このオプション時を使用することができま す。それは、リンカスクリプトの出力セクションの割り当てを上書きし て、同じ名前で入力セクションの通常マージを防止します。 -v --version -V ld のためのバージョン番号を表示します。また、-V オプションは、サ ポートされるエミュレーションをリストします。 -x --discard-all すべてのローカルシンボルを削除します。 -X --discard-locals すべての一時的なローカルシンボルを削除します。(これらのシンボルは、 システム特有のローカルのラベル接頭辞、通常、ELF システムのためには .L、または伝統的な a.out システムのためのには L で始まります。) -y symbol --trace-symbol=symbol symbol が現れる各リンクされたファイルの名前を印刷 (表示) します。こ のオプションは、何度も与えることができます。多くのシステムで、下線 を前に付け加えることが必要です。 利用者のリンクに未定義なシンボルがありますが、参照がどこに由来する か分からないとき、このオプションは、役に立ちます。 -Y path path をデフォルトのライブラリ検索パスに追加します。このオプション は、Solaris との互換性のために存在しています。 -z keyword 認識されるキーワードは、次の通りです: combreloc 複数の再配置 (reloc) セクションを結合し、動的なシンボル検索 キャッシュを可能にするために、それらをソートします。 defs オブジェクトファイルの未定義シンボルを許可しません。共有ライブ ラリの未定義シンボルは、まだ許可されています。 execstack 実行形式のスタックを必要とするとしてオブジェクトをマークしま す。 initfirst このオプションは、共有オブジェクトを構築するときのみ意味があり ます。同時にプロセスにもたらされるあらゆる他のオブジェクトの実 行時の初期化の前に、その実行時の初期化が起こるように、オブジェ クトをマークします。同様に、オブジェクトの実行時の終了化は、あ らゆる他のオブジェクトの実行時の終了化の後に、起こります。 interpose 主要な実行形式ではなく、すべてのシンボルの前に、そのシンボル テーブルの割り込みオブジェクトをマークします。 lazy 実行形式、または共有ライブラリを生成するとき、関数がロード時間 ではなく (レイジー (lazy) バインディング) と呼ばれる時点に関数 呼び出しの解決を延期するように動的なリンカに伝えるために、それ をマークします。レイジー (lazy) バインディングは、デフォルトで す。 loadfltr そのフィルタが実行時に直ちに処理されるオブジェクトをマークしま す。 muldefs 複数の定義を許可します。 nocombreloc 複数の再配置 (reloc) セクションの結合を無効にします。 nocopyreloc 再配置 (relocs) のコピーの生成を無効にします。 nodefaultlib このオブジェクトの依存状態のための検索が、あらゆるデフォルトの ライブラリ検索パスを無視されるオブジェクトをマークします。 nodelete 実行時にアンロードされるべきでないオブジェクトをマークします。 nodlopen "dlopen" に利用可能ではないオブジェクトをマークします。 nodump "dldump" によってダンプすることができないオブジェクトをマークし ます。 noexecstack 実行形式のスタックを必要としないようにオブジェクトをマークしま す。 norelro オブジェクトの ELF "PT_GNU_RELRO" セグメントヘッダを作成しませ ん。 now 実行形式または共有ライブラリを生成するとき、それをマークし、関 数が最初に呼び出されるとき、関数呼び出しのポイントへの解決を遅 延する代わりに、プログラムが開始されるとき、または共有ライブラ リが dlopen を使用してリンクされるとき、すべてのシンボルを解決 するように動的なリンカに伝えます。 origin オブジェクトが $ORIGIN を含んでいるとマークします。 relro オブジェクトの ELF "PT_GNU_RELRO" セグメントヘッダを作成しま す。 max-page-size=value エミュレーションの最大のページサイズを value に設定します。 common-page-size=value エミュレーションの共通ページサイズを value に設定します。 他のキーワードは、Solaris の互換性のために無視されます。 -( archives -) --start-group archives --end-group archives は、アーカイブファイルのリストであるべきです。それらは、明 示的なファイル名、または -l オプションのいずれかを指定できます。 指定されたアーカイブは、新しい未定義の参照が作成されなくなるまで、 繰り返し検索されます。通常、アーカイブは、コマンド行で指定された順 序でただ 1 度検索されます。そのアーカイブのシンボルがコマンド行で後 ろに現れるアーカイブのオブジェクトによって参照される未定義なシンボ ルを解決する必要があるなら、リンカは、その参照を解決することはでき ません。アーカイブをグループ化することによって、それらすべては、す べてのあり得る参照が解決されるまで、繰り返し検索されます。 このオプションを使用することは、重要な性能のコストがあります。それ は、2 つ以上のアーカイブの間に参照の循環が不可避であるときだけ、そ れを使用することが最善です。 --accept-unknown-input-arch --no-accept-unknown-input-arch アーキテクチャが認識することができない入力ファイルを受け付けるよう にリンカに伝えます。ユーザは、それらが何を行っているかを知り、意図 的に、これらの未知の入力ファイルでリンクしたいということを仮定して います。これは、リリース 2.14 の前で、リンカのデフォルトの振る舞い でした。リリース 2.14 以降のデフォルトの振る舞いは、そのような入力 ファイルを拒否することであるので、--accept-unknown-input-arch オプ ションは、古い振る舞いに戻すために追加されました。 --add-needed --no-add-needed このオプションは、--add-needed オプションの後に、コマンド行で記述さ れた動的なライブラリの ELF DT_NEEDED タグからの動的なライブラリの処 理に影響します。通常は、リンカは、生成された出力オブジェクトに各動 的ライブラリから DT_NEEDED タグをコピーしません。--add-needed に よって、このフラグの後に記述された、すべての動的なライブラリから DT_NEEDED タグをコピーします。--no-add-needed は、デフォルトの振る 舞いを復元します。 --as-needed --no-as-needed このオプションは、--add-needed が、実質的であるとき、--as-needed オ プションの後に、コマンド行に記述された動的ライブラリのための ELF DT_NEEDED タグに影響します。このような場合に、--as-needed によっ て、DT_NEEDED タグは、ライブラリがリンクされた時点で未定義の正規の オブジェクトからのいくつかのシンボル参照を満たすライブラリのために 発行されるだけです。--no-as-needed は、デフォルトの振る舞いを復元し ます。 -assert keyword このオプションは、SunOS の互換性のために無視されます。 -Bdynamic -dy -call_shared 動的なライブラリに対してリンクします。これは、共有ライブラリがサ ポートされるプラットフォームでのみ意味があります。このオプション は、通常、そのようなプラットフォームでのデフォルトです。このオプ ションの異なった変異型は、様々なシステムとの互換性のためです。利用 者は、コマンド行で複数回、このオプション使用することができます: そ れは、それに続いている -l オプションのためにライブラリ検索に影響し ます。 -Bgroup 動的なセクションの "DT_FLAGS_1" エントリの "DF_1_GROUP" フラグを設 定します。これによって、実行時のリンカは、グループ内だけで実行され るこのオブジェクトとその依存状態の検索を処理します。 --unresolved-symbols=report-all の意味を含みます。このオプション は、共有ライブラリをサポートする ELF プラットフォームでのみ意味があ ります。 -Bstatic -dn -non_shared -static 共有ライブラリに対してリンクしません。これは、共有ライブラリがサ ポートされるプラットフォームでのみ意味があります。このオプションの 異なった変異型は、様々なシステムとの互換性のためです。利用者は、コ マンド行でこのオプション複数回使用することができます: それは、後に 続く -l オプションのライブラリ検索に影響します。このオプションは、 --unresolved-symbols=report-all の意味も含みます。-shared で、この オプションを使用することができます。そうすることは、共有ライブラリ が作成されていますが、静的なライブラリからエントリを引くことによっ てライブラリの外部参照のすべては、解決されなければならないことを意 味します。 -Bsymbolic 共有ライブラリを作成するとき、もしあるなら、共有ライブラリ内の定義 にグローバルシンボルへの参照を結合します。通常、共有ライブラリに対 してリンクされたプログラムのために共有ライブラリ内の定義を上書きす ることができます。このオプションは、共有ライブラリをサポートする ELF プラットフォームでのみ意味があります。 -Bsymbolic-functions 共有ライブラリを作成するとき、もしあれば、グローバル関数のシンボル への参照を共有ライブラリ内の定義にバインドします。このオプション は、共有ライブラリをサポートする ELF プラットフォームでのみ意味があ ります。 --dynamic-list=dynamic-list-file 動的なリストファイルの名前をリンカに指定します。参照が共有ライブラ リ内で定義するためにバインドされるべきでないグローバルシンボルのリ ストを指定するために共有ライブラリを作成するか、または実行可能のシ ンボルテーブルに追加されるべきであるシンボルのリストを指定するため に動的にリンクされた実行形式を作成するとき、これは、通常使用されま す。このオプションは、共有ライブラリをサポートする ELF プラット フォームでのみ意味があります。 動的なリストの形式は、スコープ (範囲) とノード名なしでバージョン ノードと同じです。詳しい情報については、VERSION を参照してくださ い。 --dynamic-list-data すべてのグローバルなデータシンボルを動的なリストに含めます。 --dynamic-list-cpp-new C++ 演算子の new と delete のための組み込みの動的なリストを提供しま す。それは、主に共有された libstdc++ の構築の役に立ちます。 --dynamic-list-cpp-typeinfo C++ 実行時の識別の組み込みの動的なリストを提供します。 --check-sections --no-check-sections いくらかのオーバラップがあるかどうか確かめるために、それらが割り当 てられた後に、セクションアドレスをチェックしないようにリンカに依頼 します。通常、リンカは、このチェックを実行し、いくらかのオーバラッ プが見つかるなら、適切なエラーメッセージを生成します。リンカは、 オーバレイのセクションを知っていて、そのための許可を行います。コマ ンド行のスイッチ --check-sections を使用してデフォルトの振る舞いに 戻すことができます。 --cref 相互参照 (クロスリファレンス) テーブルを出力します。リンカマップ ファイルが生成されているなら、相互参照テーブルは、マップファイルに 印刷 (出力) されます。そうでなければ、それは、標準出力に印刷 (表示) されます。 テーブルの形式は、意図的に簡単ですので、必要であるなら、スクリプト によって容易に処理できます。シンボルは、名前でソートされて、印刷 (表示) されます。シンボルごとに、ファイル名のリストが与えられます。 シンボルが定義されているなら、リストされた最初のファイルは、定義の 位置です。残りのファイルは、シンボルへの参照を含んでいます。 --no-define-common このオプションは、コモンシンボルへのアドレスの割り当てを抑制しま す。スクリプトコマンド "INHIBIT_COMMON_ALLOCATION" には、同じ効果が あります。 --no-define-common オプションによって、決定を切り離すことは、出力 ファイルのタイプの選択から、アドレスをコモンシンボルに割り当てるこ とができます。そうでなければ、リロケーション可能ではない出力タイプ は、アドレスをコモンシンボルに割り当てることを強制します。 --no-define-common を使用することは、main プログラムだけに割り当て られたアドレスに共有ライブラリから参照されるコモンシンボルを可能に します。これは、共有ライブラリの未使用の重複した空間を削除し、実行 時のシンボル解決のための特殊化した検索パスがある多くの動的なモ ジュールがあるとき、また、間違った重複を解決するあらゆる起こり得る 混乱を防止します。 --defsym symbol=expression expression によって与えられた絶対アドレスを含んで、出力ファイルのグ ローバルシンボルを作成します。利用者は、コマンド行で複数のシンボル を定義するのに必要なだけ何度も、このオプションを使用することができ ます。このコンテキストで expression のための算術の制限された形式を サポートしています。利用者は、既存のシンボルの 16 進数の定数または 名前を与えるか、または 16 進数の定数またはシンボルを追加するか、ま たは減じるために、"+" と "-" を使用することができます。利用者が複雑 の式を必要としているなら、スクリプトからリンカコマンド言語を使用す ることを考慮してください。注: symbol、等号 ("=") と expression の間 に空白類があるべきではありません。 --demangle[=style] --no-demangle これらのオプションは、エラーメッセージと他の出力の シンボル名をデマ ングル (demangle) するかどうかを制御します。リンカがデマングルする ように言われるとき、読み込み可能な方法でシンボル名を表示しようとし ます: それらがオブジェクトファイル形式によって使用されるなら、先導 する下線を取り除き、C++ のマングルされたシンボル名をユーザに読み込 み可能な名前に変換します。異なったコンパイラには、異なったマングル のスタイルがあります。オプションのデマングルスタイルの引数は、利用 者のコンパイラのために適切なデマングルスタイルを選択するために使用 することができます。リンカは、環境変数 COLLECT_NO_DEMANGLE が設定さ れていないなら、デフォルトでデマングルします。これらのオプション は、デフォルトを上書きするために使用することができます。 --dynamic-linker file 動的なリンカの名前を設定します。これは、動的にリンクされた ELF 実行 形式を生成するときのみ意味があります。デフォルトの動的リンカは、通 常、間違っていません。利用者は、何をしているかを知っていないなら、 これを使用してはいけません。 --fatal-warnings すべての警告をエラーのように扱います。 --force-exe-suffix 出力ファイルに .exe 接尾辞があることを確かめます。 成功して構築され完全にリンクされた出力ファイルに ".exe" または ".dll" 接尾辞がないなら、このオプションによって、リンカは、".exe" 接尾辞を付けた同じ名前のものに出力ファイルを強制的にコピーします。 このオプションは、それが ".exe" 接尾辞で終わらないなら、Windows の いくつかのバージョンが、イメージを実行しないので、Microsoft Windows のホストで修正されていない Unix makefiles を使用する時に役に立ちま す。 --gc-sections --no-gc-sections 未使用の入力セクションのガベージコレクションを有効にします。このオ プションをサポートしないターゲットで無視されます。このオプション は、-r または --emit-relocs と互換性がありません。コマンド行で --no-gc-sections を指定することによって、(このガーベージコレクショ ンを実行しない) デフォルトの振る舞いを復元することができます。 --print-gc-sections --no-print-gc-sections ガーベージコレクションによって削除されたすべてのセクションをリスト します。リストは、stderr に印刷されます。このオプションは、ガーベー ジコレクションが --gc-sections オプションによって有効にされる場合に 限り有効です。コマンド行で --no-print-gc-sections を指定することに よって、(削除されるセクションをリストしない) デフォルトの振る舞いを 復元することができます。 --help 標準出力にコマンド行のオプションの要約を印刷 (表示) し、終了しま す。 --target-help 標準出力にすべてのターゲット特有オプションの要約を印刷 (表示) し、 終了します。 -Map mapfile ファイル mapfile にリンクマップを印刷 (表示) します。上記の -M オプ ションの説明を参照してください。 --no-keep-memory ld は、通常、メモリに入力ファイルのシンボルテーブルをキャッシュする ことによってメモリ使用量によってスピードを最適化します。このオプ ションは、代わりに、必要に応じてシンボルテーブルを再読み込みするこ とによってメモリ使用量の最適化を ld に伝えます。ld が大きな実行形式 をリンクする間にメモリ空間を使い果たすなら、これが必要となります。 --no-undefined -z defs 通常のオブジェクトファイルから未解決のシンボル参照を報告します。こ れは、たとえリンカが、シンボリックでない共有ライブラリを作成してい ても、行われます。スイッチ --[no-]allow-shlib-undefined は、リンク されている共有ライブラリで見つかる未解決の参照を報告するための振る 舞いを制御します。 --allow-multiple-definition -z muldefs 通常、シンボルが、複数回定義されるとき、リンカは、致命的エラーを報 告します。これらのオプションは、複数の定義を許可し、最初の定義が使 用されます。 --allow-shlib-undefined --no-allow-shlib-undefined 共有ライブラリの未定義なシンボルを許可する (デフォルト) か、または 許可しません。このスイッチは、未定義なシンボルが、通常のオブジェク トファイルではなく、共有ライブラリにあるとき、振る舞いを決定するこ とを除いて --no-undefined に似ています。通常のオブジェクトファイル の未定義なシンボルが、どのように処理されるかに影響しません。 --allow-shlib-undefined がデフォルトである理由は、リンク時に指定さ れている共有ライブラリが、ロード時間に利用可能であるものと同じでは ないかもしれないので、シンボルは、実際、ロード時に解決可能となりま す。さらに、共有ライブラリの未定義なシンボルが正常である (例えば、 BeOS) いくつかのシステムがあります。(カーネルは、関数が現在のアーキ テクチャに最も適切であるかを選択するロード時に、それらをパッチしま す。例えば、これは、適切な memset 関数を動的に選択するために使用さ れます)。また、明らかに、未定義なシンボルがある HPPA の共有ライブラ リに対して正常です。 --no-undefined-version 通常、シンボルに未定義なバージョンがあるとき、リンカは、それを無視 します。このオプションは、未定義なバージョンがあるシンボルを許可せ ず、致命的エラーが、代わりに発行されます。 --default-symver バージョン化されていない (unversioned) エクスポートされたシンボルの ためのデフォルトのシンボルバージョン (soname) を作成して、使用しま す。 --default-imported-symver バージョン化されていない (unversioned) インポートされたシンボルのた めのデフォルトのシンボルバージョン (soname) を作成して、使用しま す。 --no-warn-mismatch 通常、ld は、利用者が、たぶん、それらは、異なったプロセッサのため に、または異なったエンディアンの区別のためにコンパイルされたので、 いくらかの理由のために不適当である入力ファイルとともにリンクしよう と試みるなら、エラーとなります。このオプションは、そのような起こり 得るエラーを静かに許可するべきであることを ld に伝えます。このオプ ションは、利用者が、リンカエラーが不適切であることを保証するいくつ かの特別なアクションを取ったときの場合のみに、注意して使用されるべ きです。 --no-warn-search-mismatch 通常、ld は、ライブラリ検索の間に互換性のないライブラリを見つけるな ら、警報を出します。このオプションは、警告を封じます。 --no-whole-archive それに続くアーカイブファイルのための --whole-archive オプションの効 果をオフにします。 --noinhibit-exec それがまだ使用可能であるときはいつでも実行形式の出力ファイルを保持 し続けます。通常、リンカは、リンクプロセスの間にエラーに遭遇するな ら、出力ファイルを生成しません。どんなものであれ、なんらかのエラー を発行するとき、出力ファイルを書き込むことがなく終了します。 -nostdlib コマンド行で明示的に指定されたライブラリのディレクトリだけを検索し ます。(コマンド行で指定されたリンカスクリプトを含んで) リンカスクリ プトで指定されたライブラリのディレクトリは、無視されます。 --oformat output-format 複数の種類のオブジェクトファイルをサポートするように ld を設定する ことができます。利用者の ld がこの方法で設定されるなら、利用者は、 出力オブジェクトファイルのためのバイナリ形式を指定する --oformat オ プションを使用することができます。ld が代わりのオブジェクト形式をサ ポートするために設定されるときでさえ、ld は、各マシンで最も一般的な 形式をデフォルト出力形式として生成するように設定されるべきであるの で、利用者は、通常、これを指定する必要はありません、output-format は、BFD ライブラリによってサポートされる特定の形式の名前であるテキ スト文字列です。(利用者は、objdump -i で利用可能なバイナリ形式をリ ストすることができます。) また、スクリプトコマンド "OUTPUT_FORMAT" は、出力形式を指定することができますが、このオプションは、それを上 書きします。 -pie --pic-executable 位置独立の実行形式を作成します。これは、現在、ELF プラットフォーム でのみサポートされます。位置独立の実行形式は、それらが、(呼び出しの 間に変わるかもしれない) それらに対して OS が選択する仮想アドレスへ の動的なリンカによって再配置 (リロケーション) される点で、共有ライ ブラリに似ています。通常の動的にリンクされた実行形式のように、それ らを実行することができ、実行形式で定義されたシンボルは、共有ライブ ラリによって上書きすることができません。 -qmagic このオプションは、Linux の互換性のために無視されます。 -Qy このオプションは、SVR4 の互換性のために無視されます。 --relax マシン依存の効果があるオプション。このオプションは、わずかなター ゲットでのみサポートされています。 いくつかのプラットフォームで、--relax オプションは、リンカが、アド レスモードを緩和して、出力オブジェクトファイルの新しい命令を合成す るのような、プログラムのアドレッシングを解決するとき、可能となるグ ローバルな最適化を実行します。 いくつかのプラットフォームで、これらのリンク時のグローバルな最適化 は、結果の実行形式のシンボリックデバッグを不可能にします。これは、 プロセッサの Matsushita MN10200 と MN10300 ファミリの事例であると知 られています。 これがサポートされないプラットフォームで、--relax は、受け付けられ ますが、無視されます。 --retain-symbols-file filename ファイル filename にリストされたシンボルだけを保持して、他のすべて 破棄します。filename は、1 つ行ごとに 1 つのシンボル名がある単純で 平坦なファイルです。このオプションは、実行時のメモリを節約するため に、大きなグローバルシンボルテーブルが徐々に累積される (VxWorks の ような) 環境で特に役に立ちます。 --retain-symbols-file は、未定義のシンボル、または再配置 (リロケー ション) のために必要とされるシンボルを破棄しません。 利用者は、コマンド行で --retain-symbols-file を1 度だけ指定します。 それは、-s と -S を上書きします。 -rpath dir 実行時のライブラリ検索パスにディレクトリを追加します。これは、ELF 実行形式と共有オブジェクトをリンクするとき、使用されます。すべて -rpath 引数は、連結され、実行時に共有オブジェクトを探すために、それ らを使用する、実行時リンカに渡されます。また、-rpath オプションは、 リンクに明示的に含められる共有オブジェクトによって必要とされる共有 オブジェクトを探すとき、使用されます。-rpath-link オプションの説明 を参照してください。-rpath が ELF 実行形式をリンクするとき、使用さ れないなら、環境変数 "LD_RUN_PATH" の内容は、定義されているなら、使 用されます。 また、-rpath オプションは、SunOS で使用されます。デフォルトで、 SunOS では、リンカは、それが与えられるすべての -L オプションから実 行時の検索パッチを形成します。-rpath オプションが使用されるなら、実 行時の検索パスは、-L オプションを無視して、-rpath オプションを排他 的に使用して形成されます。これは、NFS マウントされたファイルシステ ムで、多くの -L オプションを追加する gcc を使用するとき、役に立ちま す。 他の ELF リンカとの互換性のために、-R オプションが、ファイル名では なく、ディレクトリ名が続いているなら、それは、-rpath オプションとし て扱われます。 -rpath-link DIR ELF または SunOS を使用するとき、1 つの共有ライブラリは、別のものを 必要とするかもしれません。これは、"ld -shared" リンクが入力ファイル の 1 つとして共有ライブラリを含むとき、起こます。 リンカがそのような依存状態に遭遇するとき、共有されず、再配置 (リロ ケーション) 可能でないリンクを行うとき、それは、それが明示的に含ま れないなら、自動的に、必要な共有ライブラリを探して、それをリンクに 含めることを試みます。そのような場合に、-rpath-link オプションは、 検索のためのディレクトリの最初の組を指定します。-rpath-link オプ ションは、コロンによって区切られた名前のリストを指定することによっ て、または複数回現れることによって、一連のディレクトリ名を指定する ことができます。 このオプションは、共有ライブラリへハードにコンパイルされた (組み込 まれた) 検索パスを上書きするので、慎重に使用されるべきです。そのよ うな場合に、実行時リンカが行うことに比べて、異なる検索パスを無意識 で使用することがあり得ます。 リンカは、要求された共有ライブラリを探すために次の検索パスを使用し ます: 1. -rpath-link オプションによって指定されたあらゆるディレクトリ。 2. -rpath オプションによって指定されたあらゆるディレクトリ。-rpath and -rpath-link の違いは、-rpath オプションで指定されたディレク トリは、実行形式に含まれて、実行時に使用されますが、一方 -rpath-link オプションは、リンク時にのみ効果があります。このよ うに -rpath を検索することは、--with-sysroot オプションで設定さ れたネイティブのリンカとクロスリンカによってのみサポートされま す。 3. ELF システムで、-rpath と "rpath-link" オプションが使用されな かったなら、環境変数 "LD_RUN_PATH" の内容を検索します。それは、 ネイティブのリンカのためだけです。 4. SunOS で、-rpath オプションが使用されなかったなら、-L オプショ ンを使用して指定されたあらゆるディレクトリを検索します。 5. ネイティブのリンカに対して、環境変数 "LD_LIBRARY_PATH" の内容。 6. ネイティブの ELF リンカに対して、共有ライブラリの "DT_RUNPATH" または "DT_RPATH" のディレクトリは、それによって必要とされる共 有ライブラリを検索します。"DT_RPATH" エントリは、"DT_RUNPATH" エントリが存在するなら、無視されます。 7. デフォルトのディレクトリ、通常 /lib と /usr/lib。 8. ELF システムのネイティブのリンカに対して、ファイル /etc/ld.so.conf が存在するなら、そのファイルで見つかるディレク トリのリスト。 必要な共有ライブラリが見つけられないなら、リンカは、警告を発行し、 リンクを続行します。 -shared -Bshareable 共有ライブラリを作成します。これは、現在、ELF、XCOFF と SunOS プ ラットフォームでのみサポートされています。SunOS では、リンカは、-e オプションが使用されず、リンクに未定義なシンボルがあるなら、共有ラ イブラリを自動的に作成します。 --sort-common このオプションは、適切な出力セクションにそれらを置くとき、サイズに よってコモンシンボルをソートするように ld に伝えます。最初に、すべ て 1 バイトシンボル、次にすべての 2 バイトのシンボル、次にすべての 4 バイトのシンボルと次に他のすべてのシンボルが来ます。これは、整列 の制約のためにシンボルの間のギャップを防止するためです。 --sort-section name このオプションは、リンカスクリプトのすべてのワイルドカードのセク ションパターンに "SORT_BY_NAME" を適用します。 --sort-section alignment このオプションは、リンカスクリプトのすべてのワイルドカードのセク ションパターンに "SORT_BY_ALIGNMENT" を適用します。 --split-by-file [size] --split-by-reloc に似ていますが、size に到達するとき、入力ファイル ごとに新しい出力セクションを作成します。size が、与えられないなら、 デフォルトのサイズは、1 です。 --split-by-reloc [count] ファイルの単一の出力セクションが、count 再配置 (リロケーション) 以 上を含まないように、出力ファイルの特別なセクションを作成することを 試みます。これは、COFF オブジェクトファイル形式で特定のリアルタイム カーネルにダウンロードするための巨大な再配置 (リロケーション) 可能 なファイルを生成するとき、役に立ちます。なぜなら、COFF が単一のセク ションの 65535 を超える再配置 (リロケーション) を表すことができない ならです。これは、任意のセクションをサポートしないオブジェクトファ イル形式で動作することに失敗することに注意してください。リンカは、 再配布のための個別の入力セクションを分割しないので、単一の入力セク ションが、count 再配置 (リロケーション) を越えて含んでいるなら、1 つの出力セクションは、その多くの再配置 (リロケーション) を含みま す。count のデフォルトの値は、32768 です。 --stats 実行時間とメモリ使用量のようなリンカの操作に関する統計値を計算し、 表示します。 --sysroot=directory 設定時間のデフォルトを無効にして、sysroot の位置として directory を 使用します。このオプションは、--with-sysroot を使用して設定されたリ ンカによってのみサポートされます。 --traditional-format いくつかのターゲットについて、ld の出力は、ある既存のリンカの出力と いくつかの点で異なっています。このスイッチは、代わりに、伝統的な形 式を使用する ld を要求します。 例えば、SunOS で、ld は、シンボル文字列テーブルの重複したエントリを 結合します。これは、完全なデバッグ情報で出力ファイルのサイズを 30 パーセント以上縮小することができます。残念ながら、SunOS の "dbx" プ ログラムは、結果のプログラムを読み込むことができません ("gdb" に は、トラブルがありません)。--traditional-format スイッチは、重複し たエントリを結合しないように ld に伝えます。 --section-start sectionname=org org によって与えられた絶対アドレスに出力ファイルのセクションを置き ます。利用者は、コマンド行に複数のセクションを置くために必要に応じ て何度でも、このオプションを使用することができます。org は、単一の 16 進数の整数でなければなりません。他のリンカとの互換性のために、利 用者は、通常 16 進数の値に関連する先導する 0x を省略することができ ます。注: sectionname、等号 ("=") と org の間に、空白類があるべきで はありません。 -Tbss org -Tdata org -Ttext org sectionname として ".bss"、".data" または ".text" がある --section-start と同じです。 --unresolved-symbols=method どのように未解決のシンボルを処理するかを決定します。method のための 4 つのあり得る値があります: ignore-all あらゆる未解決のシンボルを報告しません。 report-all すべての未解決のシンボルを報告します。これは、デフォルトです。 ignore-in-object-files 共有ライブラリに含まれている未解決のシンボルを報告しますが、そ れらが通常のオブジェクトファイルに由来するなら、それらを無視し ます。 ignore-in-shared-libs 通常のオブジェクトファイルに由来する未解決のシンボルを報告しま すが、それらが、共有ライブラリに由来するなら、それらを無視しま す。これは、動的なバイナリを作成するとき役に立つかもしれず、そ れが参照しているべき、すべての共有ライブラリがリンカのコマンド 行に含まれていることが、知られています。 また、--[no-]allow-shlib-undefined オプションによって共有ライブラリ それ自体に対する振る舞いを制御することができます。 通常、リンカは、報告された未解決シンボルごとに 1 つのエラーメッセー ジを生成しますが、オプション --warn-unresolved-symbols は、これを警 告に変更することができます。 --dll-verbose --verbose ld のためのバージョン番号を表示し、サポートされるリンカのエミュレー ションをリストします。入力ファイルが、オープンできることとできない ことを表示します。リンカによって使用されているリンカスクリプトを表 示します。 --version-script=version-scriptfile リンカにバージョンスクリプトの名前を指定します。これは、通常、作成 されているライブラリのためのバージョンの階層に関する追加の情報を指 定するために共有ライブラリを作成するとき、使用されます。このオプ ションは、共有ライブラリをサポートする ELF プラットフォームでのみ意 味があります。 --warn-common コモンシンボルが別のコモンシンボルまたはシンボル定義と結合されると き、警告します。Unix リンカは、このいくらか粗雑な慣習を許可します が、いくつかの他のオペレーティングシステムのリンカは、許可しませ ん。このオプションによって、利用者は、グローバルシンボルを結合する ことから潜在的な問題を見つけることができます。残念ながら、いくつか の C ライブラリは、この慣習を使用するので、利用者は、利用者のプログ ラムと同様にライブラリのシンボルに関していくつかの警告を受け取りま す。 ここで C の使用例によって説明された 3 種類のグローバルシンボルがあ ります: int i = 1; 出力ファイルの初期化されたデータセクションに置かれる定義。 extern int i; 空間を割り付けない未定義の参照。変数のための定義またはコモンシ ンボルがどこかになければなりません。 int i; コモンシンボル。変数にコモンシンボルだけがあるなら、出力ファイ ルの初期化されていないデータ領域に置かれます。リンカは、単一の シンボルに同じ変数のための複数のコモンシンボルをマージします。 それらに異なったサイズがあるなら、最も大きいサイズを選択しま す。リンカは、同じ変数の定義があるなら、コモンシンボルを宣言に 変えます。 --warn-common オプションは、5 種類の警告を発行します。各警告は、ペ アの行から成ります: 最初は、たった今遭遇するシンボルを説明し、2 番 目は、同じ名前で遭遇する以前のシンボルを説明しています。2 つのシン ボルの 1 つまたは両方は、コモンシンボルです。 1. すでにシンボルの定義があるので、コモンシンボルを参照に変えま す。 <file>(<section>): warning: common of `<symbol>' overridden by definition <file>(<section>): warning: defined here 2. シンボルに対して後の定義に遭遇するので、コモンシンボルを参照に 変えます。これは、シンボルが異なる順序で遭遇することを除いて、 前の場合と同じです。 <file>(<section>): warning: definition of `<symbol>' overriding common <file>(<section>): warning: common is here 3. コモンシンボルを前の同じサイズのコモンシンボルとマージします。 <file>(<section>): warning: multiple common of `<symbol>' <file>(<section>): warning: previous common is here 4. コモンシンボルを前のより大きいコモンシンボルとマージします。 <file>(<section>): warning: common of `<symbol>' overridden by larger common <file>(<section>): warning: larger common is here 5. コモンシンボルを前のより小さいコモンシンボルとマージします。こ れは、シンボルが異なった順序で遭遇することを除いて、前の場合と 同じです。 <file>(<section>): warning: common of `<symbol>' overriding smaller common <file>(<section>): warning: smaller common is here --warn-constructors 何らかのグローバルコンストラクタが使用されるなら、警告します。これ は、わずかのオブジェクトファイルの形式のためだけに役に立ちます。 COFF または ELF のような形式について、リンカは、グローバルコンスト ラクタの使用を検出することができません。 --warn-multiple-gp 複数のグローバルなポインタ値が出力ファイルで必要とされるなら、警告 します。これは、Alpha のような特定のプロセッサのためのみ意味があり ます。特に、いくつかのプロセッサは、特別なセクションに大きな値の定 数を置きます。定数が、ベースレジスタ相対のアドレスモードによって効 率的にロードすることができるように、特別なレジスタ (グローバルなポ インタ) は、このセクションの中間を指しています。ベースレジスタ相対 モードのオフセットが固定され、相対的に小さい (例えば、16 ビット) た めに、これは、定数のプールの最大サイズを制限しています。したがっ て、大きなプログラムで、すべてのあり得る定数に対処することができる しばしば、複数のグローバルなポインタ値を使用する必要があります。こ のオプションによって、この場合が起こるときはいつでも警告を発行しま す。 --warn-once それを参照しているモジュールごとに 1 度でなく、未定義シンボルごとに 1 度だけ警告します。 --warn-section-align 整列のために、出力セクションのアドレスが変更されるならば、警告しま す。通常、整列は、入力セクションによって設定されます。アドレスは、 明示的に指定しなかった場合のみ、変更されます。すなわち、"SECTIONS" コマンドが、セクションのための開始アドレスを指定しない場合です。 --warn-shared-textrel リンカが DT_TEXTREL を共用オブジェクトに追加するなら、警告します。 --warn-unresolved-symbols リンカが未解決のシンボル (オプション --unresolved-symbols を参照) を報告しようとしているなら、それは、通常、エラーを生成します。この オプションは、代わりに、警告を生成させます。 --error-unresolved-symbols これは、未解決のシンボルを報告しているとき、エラーを生成するリンカ のデフォルトの振る舞いを復元します。 --whole-archive --whole-archive オプションの後にコマンド行に記述されたアーカイブご とに、必要なオブジェクトファイルに対してアーカイブを検索するのでは なく、リンクのアーカイブにすべてのオブジェクトファイルを含めます。 これは、通常、すべてのオブジェクトを結果の共有ライブラリに含めるこ とを強制して、アーカイブファイルを共有ライブラリに変換するために使 用されます。このオプションは、複数回使用できます。 gcc からこのオプションを使用するとき、2 つの注意があります: 最初 に、gcc は、このオプションを知らないので、利用者は、 -Wl,-whole-archive を使用しなければなりません。2 番目に、gcc は、 アーカイブのそれ自体のリストを利用者のリンクに追加し、利用者は、そ の上、このフラグがそれらに影響してほしくないので、アーカイブの利用 者のリストの後に -Wl,-no-whole-archive を使用することを忘れないでく ださい。 --wrap symbol symbol のためのラッパ関数を使用します。symbol へのあらゆる未定義の 参照は、"__wrap_symbol" に解決されます。"__real_symbol" へのあらゆ る未定義の参照は、symbol に解決されます。 システム関数のためのラッパを提供するために、これを使用することがで きます。ラッパ関数は、"__wrap_symbol" をを呼び出すべきです。それ が、システム関数を呼び出すことを望むなら、それは、"__real_symbol" を呼び出すべきです。 ここに、ささいな使用例を示します: void * __wrap_malloc (size_t c) { printf ("malloc called with %zu\n", c); return __real_malloc (c); } 利用者が、--wrap malloc を使用してこのファイルで他のコードをリンク するなら、すべての "malloc" への呼び出しは、代わりに、関数 "__wrap_malloc" を呼び出します。"__wrap_malloc" の "__real_malloc" への呼び出しは、実際の "malloc" 関数を呼び出します。 利用者は、--wrap オプションなしのリンクが成功できるように、同様に、 "__real_malloc" 関数を提供することを望みます。利用者がこれを行うな ら、"__wrap_malloc" として同じファイルの "__real_malloc" の定義を置 くべきではありません。利用者が行うなら、アセンブラは、リンカが、そ れを "malloc" にラップするチャンスがある前に、呼び出しを解決しま す。 --eh-frame-hdr ".eh_frame_hdr" セクションと ELF "PT_GNU_EH_FRAME" セグメントヘッダ の作成を要求します。 --enable-new-dtags --disable-new-dtags このリンカは、ELF の新しい動的なタグを作成することができます。しか し、古い ELF システムは、それらを理解できません。利用者が --enable-new-dtags を指定するなら、動的なタグは、必要に応じて作成さ れます。利用者が --disable-new-dtags を指定するなら、新しい動的なタ グは、作成されません。デフォルトで、新しい動的なタグは、作成されま せん。それらのオプションは、ELF システムでのみ利用可能であることに 注意してください。 --hash-size=number リンカのハッシュテーブルのデフォルトサイズを number に近い素数に設 定します。この値を増加することは、リンカの必要メモリを増加すること を犠牲にして、タスクを実行するためにリンカに要する時間の長さを減少 させることができます。この値を同様に減少させると、速度を犠牲にし て、必要メモリを減少させることができます。 --hash-style=style リンカのハッシュテーブルのタイプを設定します。style は、古典的な ELF ".hash" セクションのための "sysv"、新しいスタイルの GNU ".gnu.hash" セクションのための "gnu"、または古典的な ELF ".hash" と 新しいスタイルの GNU ".gnu.hash" ハッシュテーブルのための "both" の いずれかを指定することができます。デフォルトは、"sysv" です。 --reduce-memory-overheads このオプションは、シンクする速度を犠牲にして ld ランタイムに必要な メモリを減少します。これは、シンボルの記憶域のために約 40% より多く のメモリを使用する新しい O(n) アルゴリズムではなく、リンクマップ ファイル生成のために古い O(n^2) アルゴリズムを選択するために導入さ れました。 スイッチの別の効果は、リンカの実行時間が長くなるコストでメモリを再 び節約する、デフォルトのハッシュテーブルのサイズを 1021 に設定する ことです。しかしながら、--hash-size スイッチが使用されらたなら、こ れは、行われません。 リンカの将来のバージョンの他のトレードオフを有効にするために --reduce-memory-overheads スイッチも使用されるかもしれません。 i386 PE リンカは、通常の実行形式の代わりに動的にリンクされたライブラリ (DLL) を出力する -shared オプションをサポートしてます。利用者は、このオ プションを使用するとき、出力を "*.dll" と名前を付けるべきです。さらに、 リンカは、オブジェクトファイルのようなリンカコマンド行で指定される、標 準の "*.def" ファイルを完全にサポートします (実際に、それは、ちょうど通 常のオブジェクトファイルのように、それらが、リンクされることを保証する ためにシンボルをエクスポートするアーカイブに先行するべきです)。 すべてのターゲットへの共通オプションに加えて、i386 PE リンカは、i386 PE ターゲットに特有の追加のコマンド行オプションをサポートしています。値を 取るオプションは、空白または等号のいずれかによって、それらの値から区切 られます。 --add-stdcall-alias 与えられるなら、stdcall 接尾辞 (@nn) があるシンボルは、そのままで接 尾辞を取り除かれてエクスポートされます。[このオプションは、リンカの i386 PE ターゲットとする port に特有です] --base-file file dlltool で DLL を生成するために必要なすべての再配置 (リロケーショ ン) のベースアドレスを保存する、ファイルの名前として file を使用し ます。[これは、i386 PE 特有のオプションです] --dll 通常の実行形式の代わりに DLL を作成します。また、利用者は、-shared 使用するか、または与えられた ".def" ファイルの "LIBRARY" を指定しま す。[このオプションは、リンカの i386 PE ターゲットとする port に特 有です] --enable-stdcall-fixup --disable-stdcall-fixup リンクが、解決できないシンボルを見つけるなら、シンボル名 (cdecl vs stdcall) の形式でのみ異なる別の定義されたシンボルを検索することに よって "曖昧なリング" (fuzzy linking) を行うことを試み、一致するリ ンクによってシンボルを解決します。例えば、未定義シンボル "_foo" は、関数 "_foo@12" とリンクされるか、または、未定義シンボル "_bar@16" は、関数 "_bar" とリンクされるかもしれません。リンカがこ れを行うとき、通常、それは、リンクに失敗するべきであったので、それ は、警告を印刷 (表示) しますが、サードパーティの dll から生成された インポートライブラリは、使用可能であるこの機能を必要とするかもしれ ません。利用者が --enable-stdcall-fixup を指定するなら、この機能 は、完全に有効にされ、警告は、印刷 (表示) されません。利用者が --disable-stdcall-fixup を指定するなら、この機能は、無効にされ、そ のような不一致は、エラーであるとみなされます。[このオプションは、リ ンカの i386 PE ターゲットとする port に特有です] --export-all-symbols 与えられるなら、DLL を構築するために使用されるオブジェクトのすべて のグローバルシンボルは、DLL によってエクスポートされます。そうでな ければ、何もエクスポートされたシンボルがないなら、これが、デフォル トであることに注意してください。シンボルが DEF ファイルによって明示 的にエクスポートされるか、または関数属性によって暗黙にエクスポート されるとき、このオプションが与えられないなら、デフォルトは、他に何 もエクスポートされないことです。シンボル "DllMain@12"、 "DllEntryPoint@0"、"DllMainCRTStartup@12" と "impure_ptr" は、自動 的にエクスポートされないことに注意してください。また、他の DLL から インポートされたシンボルは、再エクスポートされず、"_head_" で始まる か、または "_iname" で終るもののような、DLL の内部のレイアウトを指 定しているシンボルでもありません。さらに、"libgcc"、"libstd++"、 "libmingw32" または "crtX.o" からのシンボルは、エクスポートされませ ん。"__rtti_" または "__builtin_" で始まる名前のシンボルは、C++ DLL を支援するためにエクスポートされません。最後に、エクスポートされな い cygwin のプライベートシンボルの多数のリストがあります (明らか に、これは、cygwin のターゲットのために DLL を構築するとき適用しま す)。これらの Cygwin を除外したものは、次の通りです: "_cygwin_dll_entry@12", "_cygwin_crt0_common@8", "_cygwin_noncygwin_dll_entry@12", "_fmode", "_impure_ptr", "cygwin_attach_dll", "cygwin_premain0", "cygwin_premain1", "cygwin_premain2", "cygwin_premain3" と "environ"。[このオプション は、リンカの i386 PE ターゲットとする port に特有です] --exclude-symbols symbol,symbol,... 自動的にエクスポートされるべきではないシンボルのリストを指定しま す。シンボル名は、コンマまたはコロンによって区切られます。[このオプ ションは、リンカの i386 PE ターゲットとする port に特有です] --file-alignment ファイル整列を指定します。ファイルのセクションは、常に、この数の倍 数であるファイルオフセットで始まります。このデフォルトは、512 で す。[このオプションは、リンカの i386 PE ターゲットとする port に特 有です] --heap reserve --heap reserve,commit このプログラムのためのヒープとして使用するために予約され (そして、 オプションでコミットする) メモリの量を指定します。デフォルトは、1Mb が予約され、4K がコミットされます。[このオプションは、リンカの i386 PE ターゲットとする port に特有です] --image-base value 利用者のプログラムまたは dll のベースアドレスとして value を使用し ます。これは、利用者のプログラムまたは dll がロードされるとき、使用 される最も低いメモリ位置です。再配置 (リロケーション) する必要性を 軽減し、利用者の dll の性能を改良するために、それぞれは、あらゆる他 の dll をオーバラップせずにユニークなベースアドレスがあるべきです。 デフォルトは、実行形式のための 0x400000 と dll のための 0x10000000 です。[このオプションは、リンカの i386 PE ターゲットとする port に 特有です] --kill-at 与えられるなら、stdcall の接尾辞 (@nn) は、それらがエクスポートされ る前に、シンボルから取り除かれます。[このオプションは、リンカの i386 PE ターゲットとする port に特有です] --large-address-aware 与えられるなら、COFF ヘッダの "Characteristics" フィールドの適切な ビットは、この実行形式が 2 ギガバイトより大きい仮想アドレスをサポー トすることを示すように設定されます。これは、BOOT.INI の "[operating systems]" セクションで /3GB または /USERVA=value メガバイトのスイッ チと連動して使用されるべきです。そうでなければ、このビットには、効 果がありません。[このオプションは、リンカの i386 PE ターゲットとす る port に特有です] --major-image-version value "イメージバージョン" (image version) のメジャー番号を設定します。デ フォルトは、1 です。[このオプションは、リンカの i386 PE ターゲット とする port に特有です] --major-os-version value "OS バージョン" (os version) のメジャー番号を設定します。デフォルト は、4 です。[このオプションは、リンカの i386 PE ターゲットとする port に特有です] --major-subsystem-version value "サブシステムバージョン" (subsystem version) のメジャー番号を設定し ます。デフォルトは、4 です。[このオプションは、リンカの i386 PE ターゲットとする port に特有です] --minor-image-version value "イメージバージョン" (image version) のマイナ番号を設定します。デ フォルトは、0 です。[このオプションは、リンカの i386 PE ターゲット とする port に特有です] --minor-os-version value "OS バージョン" (os version) のマイナ番号を設定します。デフォルト は、0 です。[このオプションは、リンカの i386 PE ターゲットとする port に特有です] --minor-subsystem-version value "サブシステムバージョン" (subsystem version) のマイナ番号を設定しま す。デフォルトは、0 です。[このオプションは、リンカの i386 PE ター ゲットとする port に特有です] --output-def file リンカは、リンカが生成する DLL に対応している DEF ファイルを含んで いるファイル file を作成します。("*.def" と呼ばれるはずの) この DEF ファイルは、"dlltool" でインポートライブラリを作成するために使用さ れるか、または自動的または暗黙にエクスポートされたシンボルへの参照 として使用されます。[このオプションは、リンカの i386 PE ターゲット とする port に特有です] --out-implib file リンカは、リンカが生成する DLL に対応しているインポート lib を含ん でいるファイル file を作成します。"*.dll.a" または "*.a" と呼ばれる はずの、このインポート lib は、生成された DLL に対してクライアント をリンクするために使用されます。この振る舞いは、個別の "dlltool" イ ンポートライブラリの作成ステップをスキップすることができます。[この オプションは、リンカの i386 PE ターゲットとする port に特有です] --enable-auto-image-base "--image-base" 引数を使用して指定されないなら、DLL のためにイメージ ベースを自動的に選択します。各 DLL のためのユニークなイメージベース を作成するために dllname から生成されたハッシュを使用することによっ て、プログラムの実行を遅延することができるメモリ間の衝突と再配置 (リロケーション) が回避されます。[このオプションは、リンカの i386 PE ターゲットとする port に特有です] --disable-auto-image-base ユニークなイメージベースを自動的に生成しません。ユーザ指定のイメー ジベース ("--image-base") ないなら、プラットフォームのデフォルトを 使用します。[このオプションは、リンカの i386 PE ターゲットとする port に特有です] --dll-search-prefix string インポートライブラリなしの dll に動的にリンクするとき、 "lib<basename>.dll" に優先して "<string><basename>.dll" を検索しま す。この振る舞いは、様々な "サブプラットフォーム": native, cygwin, uwin, pw などのために DLL の構築の間に容易に区別することができま す。例えば、cygwin DLL は、通常、"--dll-search-prefix=cyg" を使用し ます。[このオプションは、リンカの i386 PE ターゲットとする port に 特有です] --enable-auto-import DLL からの DATA インポートのための "_symbol" から "__imp__symbol" までの洗練されるリンクを行い、それらの DATA エクスポートでインポー トライブラリを構築するとき、必要なサンク (16 ビットアドレスを 32 ビットアドレスに変換すること) モードのシンボルを作成します。注: 'auto-import' 拡張の使用は、イメージファイルのテキストセクションを 書き込み可能にします。これは、Microsoft によって出版された PE-COFF 形式使用に適合しません。 一般的に 'auto-import' を使用することは、'単に動作します' -- しか し、時々、利用者は、次のメッセージを見るかもしれません: "variable '<var>' can't be auto-imported. Please read the documentation for ld's "--enable-auto-import" for details." このメッセージは、いくつかの (サブ) 式が、2 つの定数の合計によって 最終的に与えられるアドレスをアクセスするとき、生じます (Win32 イン ポートテーブルは、1 つのみを許可します)。これが起こるインスタンス は、DLL からインポートされた配列変数に定数インデックスを使用するの と同様に、DLL からインポートされた構造体 (struct) の変数のメンバ フィールドへのアクセスを含みます。あらゆる複数の単語の変数 (配列、 構造体 (struct)、long long など) は、このエラー条件を引き起こすかも しれません。しかしながら、目障りなエクスポートされた変数の正確な データタイプにかかわらず、ld は、常にそれを検出し、警告を発行して、 終了します。 エクスポートされた変数のデータタイプにかかわらず、この問題を解決す るいくつかの方法があります: 一方の方法は、--enable-runtime-pseudo-reloc スイッチを使用すること です。これは、実行時の環境のための利用者のクライアントコードで参照 を調整するタスクを残すので、この方法は、実行時の環境がこの機能をサ ポートするときだけ、動作します。 2 番目の解決策は、強制的に、定数の 1 つを変数にすることです -- すな わち、コンパイル時に未知で最適化不可能です。配列に対して、2 つの可 能性があります: a) インデックス (配列のアドレス) を変数にします、ま たは b) '定数' インデックスを変数にします。したがって、次の通りで す: extern type extern_array[]; extern_array[1] --> { volatile type *t=extern_array; t[1] } もしくは extern type extern_array[]; extern_array[1] --> { volatile int t=1; extern_array[t] } 構造体 (と、他のほとんどの複数の単語データタイプ) に対して、唯一の オプションは、構造体自体 (または、long long、など) の変数にすること です: extern struct s extern_struct; extern_struct.field --> { volatile struct s *t=&extern_struct; t->field } または extern long long extern_ll; extern_ll --> { volatile long long * local_ll=&extern_ll; *local_ll } この問題を扱っている 3 番目の方法は、目障りなシンボルのために、 'auto-import' を中止することで、"__declspec(dllimport)" でそれに マークします。しかしながら、実際のところ、利用者が DLL を構築してい るか、DLL にリンクするクライアントコードを構築するか、または静的な ライブラリに単に構築/リンクしているかどうかを示すためにコンパイル時 の #defines を使用することを必要とします。'定数オフセットがある直接 アドレス' 問題を解決する様々な方法の間の選択を行うにあたって、利用 者は、通常、実際の世界の使用法を考慮するべきです: オリジナル: --foo.h extern int arr[]; --foo.c #include "foo.h" void main(int argc, char **argv){ printf("%d\n",arr[1]); } 解決策 1: --foo.h extern int arr[]; --foo.c #include "foo.h" void main(int argc, char **argv){ /* This workaround is for win32 and cygwin; do not "optimize" */ volatile int *parr = arr; printf("%d\n",parr[1]); } 解決策 2: --foo.h /* Note: auto-export is assumed (no __declspec(dllexport)) */ #if (defined(_WIN32) || defined(__CYGWIN__)) && \ !(defined(FOO_BUILD_DLL) || defined(FOO_STATIC)) #define FOO_IMPORT __declspec(dllimport) #else #define FOO_IMPORT #endif extern FOO_IMPORT int arr[]; --foo.c #include "foo.h" void main(int argc, char **argv){ printf("%d\n",arr[1]); } この問題を避けるための 4 番目の方法は、有害な変数のためのデータのイ ンタフェースでなく、関数のインタフェースを使用するために利用者のラ イブラリを再コード化することです (例えば、set_foo() と get_foo() ア クセス関数)。[このオプションは、リンカの i386 PE ターゲットとする port に特有です] --disable-auto-import DLL から DATA インポートのための "_symbol" から "__imp__symbol" の 洗練されたリンクを行うことを試みません。[このオプションは、リンカの i386 PE ターゲットとする port に特有です] --enable-runtime-pseudo-reloc 利用者のコードが、--enable-auto-import セクションに記述される表現を 含んでいる、すなわち、DATA が、0 でないオフセットがある DLL からイ ンポートされているなら、このスイッチは、利用者のクライアントのコー ドのそのようなデータへの参照を調整するために実行時に環境によって使 用することができる、'実行時の疑似再配置 (リロケーション)' (runtime pseudo relocations) のベクタを作成します。[このオプションは、リンカ の i386 PE ターゲットとする port に特有です] --disable-runtime-pseudo-reloc DLL から 0 でないオフセットの DATA インポートのための疑似再配置 (リ ロケーション) を作成しません。これは、デフォルトです。[このオプショ ンは、リンカの i386 PE ターゲットとする port に特有です] --enable-extra-pe-debug 自動インポートシンボルのサンクに関連する追加のデバッグ情報を表示し ます。訳注: サンクは、16 ビットアドレスを 32 ビットアドレスに変換す ること。[このオプションは、リンカの i386 PE ターゲットとする port に特有です] --section-alignment セクションの整列を設定します。メモリのセクションは、常に、この数の 倍数であるアドレスから始まります。デフォルトは、0x1000 です。[この オプションは、リンカの i386 PE ターゲットとする port に特有です] --stack reserve --stack reserve,commit このプログラムのためのスタックとして使用するために予約され (そし て、オプションでコミットする) メモリの量を指定します。デフォルト は、2Mb が予約され、4K がコミットされます。[このオプションは、リン カの i386 PE ターゲットとする port に特有です] --subsystem which --subsystem which:major --subsystem which:major.minor 利用者のプログラムが実行しているサブシステムを指定します。which の ための正しい値は、"native", "windows", "console", "posix", と "xbox" です。オプションでサブシステムのバージョンも設定できます。数 値も which のために受け付けられます。[このオプションは、リンカの i386 PE ターゲットとする port に特有です] 68HC11 と 68HC12 リンカは、メモリバンク切り換えマッピングとトランポリン コード生成を制御するために特有のオプションをサポートします。 --no-trampoline このオプションは、トランポリンの生成を無効にします。デフォルトで、 トランポリンは、"jsr" 命令を使用して呼び出される各 far 関数のために 生成されます (far 関数へのポインタが取られるとき、これは、起こりま す)。 --bank-window name このオプションは、メモリバンクのウィンドウを記述する MEMORY 仕様で メモリ領域の名前をリンカに示します。次に、そのような領域の定義は、 メモリウィンドウ内でページングとアドレスを計算するためにリンカに よって使用されます。 環境変数 利用者は、環境変数 "GNUTARGET"、"LDEMULATION" と "COLLECT_NO_DEMANGLE" で ld の振る舞いを変更することができます。 "GNUTARGET" は、利用者が -b (または、その同義語 --format) を使用しない なら、入力ファイルのオブジェクト形式を決定します。その値は、入力形式の ための BFD 名の 1 つであるべきです。環境変数に "GNUTARGET" がないなら、 ld は、ターゲットの自然な形式を使用します。"GNUTARGET" が "default" に 設定されるなら、BFD は、バイナリの入力ファイルを調査することによって入 力形式を発見することを試みます。この方法は、しばしば成功しますが、オブ ジェクトファイル形式を指定するために使用されるマジックナンバがユニーク であることを保証する方法がないので、潜在的にあいまいさがあります。しか しながら、各システムの BFD のための設定手続きは、そのシステムのための慣 習の形式を最初に検索リストに置くので、あいまいさは、規約を支持して解決 されます。 "LDEMULATION" は、利用者が -m オプションを使用しないなら、デフォルトの エミュレーションを決定します。エミュレーションは、リンカの振る舞いの様 々な側面、特にデフォルトのリンカスクリプト、に影響するかもしれません。 利用者は、--verbose または -V オプションで利用可能なエミュレーションを リストすることができます。-m オプションが使用されず、"LDEMULATION" 環境 変数が定義されていないなら、デフォルトのエミュレーションは、どのように リンカが設定されたかに依存します。 通常、リンカは、デフォルトでシンボルをデマングルします。しかしながら、 "COLLECT_NO_DEMANGLE" が環境変数に設定されているなら、そのデフォルト は、シンボルをデマングルしないことです。この環境変数は、"gcc" リンカ ラッパプログラムによって同様の方式で使用されます。デフォルトは、 --demangle と --no-demangle オプションによって上書きされます。 関連項目 ar(1), nm(1), objcopy(1), objdump(1), readelf(1) そして Info の binutils と ld 項。 COPYRIGHT Copyright (c) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". binutils-2.17.50 2010-10-30 LD(1)