ld − GNU リンカ LD の使い方 |
ld [options] objfile ... |
ld は、いくつかのオブジェクトファイルとアーカイブファイルを結合し、その データを再配置し、シンボルの参照を結びつけます。通常、プログラムのコ ン パイルの最終段階が、ld を実行することです。 ld は、リンク処理を明示的かつ統合的に制御するために、 AT&T のリンクエ ディタコマンド言語の文法の上位互換セットで記述されたリンカコマンド言 語 のファイルを受け付けます。 こ のマニュアルページではコマンド言語についてふれません。コマンド言語の 詳細と GNU リンカの別の側面からの詳細については "info" の ld の項、また はマニュアル ld: the GNU linker を参照してください。 このバージョンの ld は、オブジェクトファイルの操作に汎用の BFD ライブラ リを使用します。これによって ld は、多くの異なった形式 −−− 例えば COFF や "a.out" のようなオブジェクトファイル −−− の読み込み、結合、書き込み が出来るようになっています。異なる形式のファイルを一緒にリンクして、 任 意の利用可能なオブジェクトファイルを生成できます。 そ の柔軟性の他にも、 GNU リンカは、診断情報の提供という点で他のリンカよ りも役に立ちます。多くのリンカは、エラーを起こした時点で即座に実行を 中 断 してしまいますが、 ld は可能な限り実行を続けるので、他のエラーも突き 止めることができます。 (また、場合によっては、エラーにもかかわらず出 力 ファイルを生成します)。 GNU リンカ ld は、広い範囲の各種状況に対応すること、そして他のリンカと の互換性をできるだけ維持することを目指しています。そのため、その動作 を 制御するための多くの選択肢があります。 |
こ の リ ンカは、おびただしい量のコマンドラインオプションを備えています が、実際には、いかなる局面においても使用されるオプションは、少ししか あ り ません。例えば、ld がよく使われるのは、Unix の標準のオブジェクトファ イルを、 ld がサポートする標準の Unix システム上でリンクする場合で す。 そ のようなシステム上では、"hello.o" というファイルをリンクするためには 以下のようにします: ld -o <output> /lib/crt0.o hello.o -lc これは、"/lib/crt0.o" と "hello.o"、そして標準で検索されるディレクト リ にあるライブラリ "libc.a" をリンクして、output という名前のファイルを生 成することを ld に対して指示しています。 ld に対するいくつかのコマンドラインオプションは、コマンドラインのどこで で も指定できます。しかし、ファイルを参照する −l や −T のようなオプショ ンは、オブジェクトファイルやその他のファイルオプションに関連してお り、 コ マンドライン中にオプションが現れた時点でファイルを読みます。ファイル を取らないオプションを異なる引数を指定して繰返しても、それ以上影響が な い か、もしくは (コマンドライン上で左にある) それまでの指定を上書きしま す。 2 回以上指定しても意味のあるオプションは、以下の説明の中で記述され ています。 オ プション引数ではないものは、一緒にリンクされるオブジェクトファイルか アーカイブです。それらは、オプションとそのオプションの引数の間に入ら な い 限り、コマンドラインオプションの前に置いても、後ろに置いても、混ぜて 指定しても構いません。 通常、リンカは少なくとも 1 つのオブジェクトファイルを指定して起動されま すが、−l や −R を用いて、またはスクリプトコマンド言語使って、他のバイナ リ形式の入力ファイルを指定することができます。バイナリ入力ファイルが 全 く 指 定されなかった場合、リンカは何も出力をせず、No input files という メッセージを出します。 リンカがオブジェクトファイルの形式を認識できなかった時は、それをリン カ ス クリプトと仮定します。このように指定されたスクリプトは、リンクに使わ れる主リンカスクリプト (デフォルトのリンカスクリプト、もしくは −T で 指 定 さ れ たスクリプト) に追加されます。この機能により、一見オブジェクト ファイルもしくはアーカイブに見えるが、実際は単にシンボル値を定義して い る だけだったり、 "INPUT" や "GROUP" を使って他のオブジェクトを読み込ん でるだけのファイルをリンクすることができます。このように指定されたス ク リ プトは、主リンカスクリプトに単に追加されるだけということに注意してく ださい。デフォルトのリンカスクリプトを完全に置き換える場合は、 −T オ プ ションを使ってください。 1 文字の名前を持つオプションの引数は、間に空白が入らずにオプション文字 に続くか、その引数が必要なオプションのすぐ後に、独立した引数として与 え られるかしなければなりません。 複 数文字の名前を持つオプションは、 1 つ、または 2 つのダッシュのどちら の後に続いても構いません。例えば、−trace−symbol と −−trace−symbol は 等 価です。このルールには 1 つだけ例外があることに注意してください。小文字 の ’o’ で始まる複数文字のオプションは、 2 つのダッシュの後にしか続き ま せん。これは、−o オプションとの混乱を少なくするためです。ですから、例え ば −omagic は出力ファイル名を magic とするのに対して、−−omagic は出力に NMAGIC フラグを設定します。 複 数文字のオプションへの引数は、等号記号がオプションとの間に入るか、そ の引数を必要とするオプションのすぐ後に、独立した引数として与えられる か し なければなりません。例えば、−−trace−symbol foo と −−trace−symbol=foo は等価です。複数文字のオプションを、一意に定まるように省略しても、受 け 付けられます。 リ ン カ がコンパイラドライバ (例えば gcc) によって間接的に起動される場 合、すべてのリンカのコマンドラインオプションは、 −Wl, (もしくは特定のコ ン パイラドライバの適切なオプション) に続いて以下のように指定されなけれ ばなりません: gcc -Wl,--startgroup foo.o bar.o -Wl,--endgroup これは重要です。というのも、このようにしないと、コンパイラドライバプ ロ グ ラムは何も言わずにリンカオプションを落してしまい、リンクが正しく行わ れなくなってしまうからです。 以下は、 GNU リンカが受け入れる一般的なコマンドラインスイッチの一覧です: |
−akeyword |
こ の オプションは、 HP/UX との互換性のためにサポートされています。 keyword 引数は、文字列 archive, shared または default のどれかでな け れ ば なりません。 −aarchive は、機能的には −Bstatic と等価であ り、残りの 2 つの keyword は、機能的に −Bdynamic と等価です。こ の オプションは何度でも使うことができます。 |
−Aarchitecture |
−−architecture=architecture |
現 在リリースされている ld では、このオプションは Intel 960 ファミ リのアーキテクチャでのみ使われます。そのよ う な ld の 構 成 で は、architecture 引数は、 960 ファミリの特定のアーキテクチャを指定 し、いくつかの保護手段を有効にし、アーカイブライブラリの検索パスを 修正します。 将来の ld のリリースでは、他のアーキテクチャファミリでも同様の機能 をサポートするかもしれません。 |
−b input-format |
−−format=input-format |
ld は、1 種類以上のオブジェクトファイルをサポートするように構成 す る ことができます。もし ld がそのように構成されているなら、−b オプ ションで入力するオブジェクトファイルのバイナリ形式を指定することが できます。その入力ファイルは、コマンドライン上でこのオプションに続 けて指定します。たとえ ld が、他のオブジェクト形式をサポートするよ う に 設定されていても、通常このオプションを指定する必要はありませ ん。というのも、ld は、それぞれマシン上で最も一般的な形式がデ フォ ル ト の 入 力 形 式 で あると期待するよう設定されているからです。 input-format はテキスト文字列で、 BFD ライブラリでサポートされて い る 特定の形式名です (objdump −i で、使用可能なバイナリ形式名のリス トが得られます)。 ファイルを通常でないバイナリ形式とリンクしたい場合に、このオプショ ンを使うことができます。 (異なる形式のオブジェクトファイルとリンク する時に) 同様に −b で明示的に形式を切り替えられます。その場 合 は −b input-format を特定の形式のオブジェクトファイルの各グループの前 で指定します。 デフォルトの形式は、環境変数 "GNUTARGET" から取得されます。 スクリプトから入力形式を指定する事もでき、その場 合 は コ マ ン ド "TARGET" を使います。 |
−c MRI-commandfile |
−−mri−script=MRI-commandfile |
MRI 製のリンカとの互換性のため、ld は、 GNU ld ドキュメントの MRI 互換スクリプトファイルの章に記述されているもう一つの制限されたコマ ン ド言語で書かれたスクリプトファイルを受け付けます。オプション −c で MRI スクリプトファイルを導入した場合は、 −T オプションを用い る ことで、汎用目的の ld スクリプト言語で書かれたリンカスクリプトを走 らせることができます。 MRI-commandfile がなかった場合、ld は、−L で指定されたすべてのディレクトリを探します。 |
−d |
|||
−dc |
|||
−dp |
これらの 3 つのオプションは等価です。他のリンカとの互換性のた めに複数の形式がサポートされています。再配置可能なファイルを出力す る ように (−r によって) 指定された場合でも、コモンシンボルに空間を 割り当てます。スクリプトコマンドの "FORCE_COMMON_ALLOCATION" も 同 じ効果を持ちます。 |
−e entry |
−−entry=entry |
プログラムの実行開始点を示す明示的なシンボルとして、デフォルトのエ ントリポイントの代わりに entry を使用します。シンボル entry が な かっ た場合、リンカは entry を数字として解釈しようと試み、それを開 始番地として使います (数字は基数を 10 として解釈されます。先頭につ い た 0x は 16 を基数とすることを表し、0 は 8 を基数とすることを表 します)。 |
−E |
−−export−dynamic |
動的にリンクされた実行ファイルを作成する時に、すべてのシンボルを動 的シンボルテーブルに加えます。動的シンボルテーブルは、実行時に動的 オブジェクトから見えるシンボルのテーブルです。 もしこのオプションを使用しなかった場合、通常、動的シンボルテーブル には、リンク中に指定されたいくつかの動的オブジェクトから参照される シンボルのみが含まれます。 他の動的オブジェクトではなく、そのプログラムで定義されているシンボ ルを参照し返す必要のある動的オブジェクトを "dlopen" でロードする場 合は、おそらくプログラム自身をリンクする時にこのオプションを使う必 要があるでしょう。 出力形式がサポートしていた場合、バージョンスクリプトを使って、どの シンボルを動的シンボルテーブルに追加すべきかを 制 御 で き ま す。 @ref{ VERSION } 中の −−version−script の記述を参照してください。 |
−EB |
ビッグエンディアンのオブジェクトをリンクします。これはデフォ ルトの出力形式に影響します。 |
|
−EL |
リトルエンディアンのオブジェクトをリンクします。これはデ フォ ルトの出力形式に影響します。 |
|
−f |
−−auxiliary name |
ELF の共有オブジェクトを生成する際に、内部の DT_AUXILIARY フィール ドに、指定した name を設定します。これは、共有オブジェクトのシンボ ルテーブルを、共有オブジェクト name のシンボルテーブルに適用する補 助のフィルタとして使う事を、動的リンカに対して指示します。 後からこのフィルタオブジェクトに対してプログラムをリンクした場合、 そのプログラムを実行した時に、動的リンカは DT_AUXILIARY フィールド を見ます。動的リンカがフィルタオブジェクトからのシンボルを解決する 場合は、共有オブジェクト name の中に定義があるかどうかをまずチェッ クします。もしそれがあった場合は、フィルタオブジェクト中の定義の代 わりに使用されます。共有オブジェクト name は、存在しなくても構いま せん。このようにして共有オブジェクト name は、おそらくデバッギング やマシン特有のパフォーマンスといったある機能の別の実装を提供するた めに使用できます。 このオプションは 2 回以上指定されても構いません。 DT_AUXILIARY エ ントリは、コマンドラインに現れた順番に生成されます。 |
−F name |
−−filter name |
ELF の共有オブジェクトを生成する際に、内部の DT_FILTER フィールド に、指定した name を設定します。これは、共有オブジェクトのシンボル テーブルを、共有オブジェクト name のシンボルテーブルに適用するフィ ルタとして使う事を、動的リンカに対して指示します。 後からこのフィルタオブジェクトに対してプログラムをリンクした場合、 そ のプログラムを実行した時に、動的リンカは DT_FILTER フィールドを 見ます。動的リンカは、通常のようにフィルタオブジェクトのシン ボ ル テー ブ ルに従ってシンボルを解決しますが、実際には共有オブジェクト name 中に見つかった定義にリンクします。このようにしてフィルタオ ブ ジェクトは、オブジェクト name によって提供されたシンボルのサブセッ トを選択するのに使用できます。 いくつかの古いリンカは、コンパイルツールチェーンを通して、 −F オプ ションを、入力および出力オブジェクトファイル両方の形式を指定するた めに使っていました。 GNU リンカは、この目的に別のメカニズムを用 い て います。それは −b, −−format, −−oformat オプションや、リンカスク リプト中の "TARGET" コマンド、そして "GNUTARGET" 環境変 数 で す。 GNU リンカは、 ELF 共有オブジェクトを作らない時には、 −F オプション を無視します。 |
−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 |
インクリメンタルリンクを行います (オプション −r と同じです)。 |
−init name |
ELF の実行形式もしくは共有オブジェクトを生成する際、関数のアドレス に DT_INIT を設定することにより、実行形式もしくは共有オブジェクト がロードされる時に NAME を呼びます。デフォルト で は、 リ ン カ は "_init" を、呼ぶべき関数として使用します。 |
−larchive |
−−library=archive |
アー カイブファイル archive を、リンクすべきファイルのリストに追加 します。このオプションは、何度 指 定 し て も 構 い ま せ ん。 ld は、archive が指定されるたびに "libarchive.a" を自身のパスリストか ら探します。 共有ライブラリをサポートするシステムでは、ld は、".a" 以 外 の サ フィッ クスを持つライブラリも探すことがあります。特に ELF や SunOS システムでは、ld は、".a" というサフィックスを持つライブラリを探す 前に、".so" というサフィックスを持つライブラリをディレクトリから探 します。慣習により、".so" サフィックスは共有ライブラリを示します。 リ ンカは、コマンドラインで指定されたその場所でのみ、 1 回だけアー カイブを検索します。もしそのアーカイブが、それまでにコマンドライン に現れたオブジェクトでは定義していないシンボルを定義していた時は、 リンカは、そのアーカイブから適切なファイルを取り込みます。しかし、 コマンドラインに後から現れたオブジェクトに含まれる未定義シンボルに よって、リンカがアーカイブを再度検索することはありません。 アーカイブを複数回検索するようリンカに強制する方法は、 −( オプショ ンを参照してください。 同じアーカイブをコマンドライン上に複数回指定しても構いません。 この種のアーカイブ検索は、Unix のリンカでは普通です。しかし AIX 上 で ld を使用する場合、 AIX リンカとは異なった動作をするので注意が必 要です。 |
−Lsearchdir |
−−library−path=searchdir |
パス searchdir を、ld がアーカイブライブラリや ld の制御スクリプト を検索するのに使用するパスのリストに追加します。このオプションは、 何度指定しても構いません。ディレクトリは、コマンドライン上で指定さ れた順に検索されます。コマンドライン上で指定されたディレクトリは、 デフォルトのディレクトリの前に検索されます。すべての −L オプション は、オプションの出現した順番によらず、すべての −l オプションに適用 されます。 searchdir が "=" で始まる場合、 "=" は sysroot prefix (リンカが構 成された際に指定されたパス) により置き換えられます。 (−L で指定されない) デフォルトの検索パスの組は、 ld がどの エ ミュ レーションモードを使っているか、そして場合によってはどのように構成 されたかに依存します。 パスは、リンクスクリプト中で "SEARCH_DIR" コマンドを用いても指定で きます。この方法で指定されたディレクトリは、コマンドライン上でリン カスクリプトが現れた時点で検索されます。 |
−memulation |
emulation リンカをエミュレートします。 −−verbose や −V オプショ ン で、利用可能なエミュレーションをリストできます。 −m オ プ ショ ン が 指 定 されていない場合、エミュレーションは、 "LDEMULATION" 環境変数が定義されていればそこから取得されます。 それ以外の場合、デフォルトのエミュレーションは、リンカがどのように 構成されたかに依存します。 |
−M |
−−print−map |
リンクマップを標準出力に表示します。リンクマップは、以下を含むリン クの情報を提供します: |
* |
オブジェクトファイルとシンボルが、メモリのどこにマップさ れ るか。 |
||
* |
コモンシンボルがどのように割り当てられたか。 |
||
* |
リンクに含まれるすべてのアーカイブメンバ、およびそのアーカ イブメンバを取り込むきっかけとなったシンボル。 |
||
−n |
−−nmagic |
セクションのページアラインメントを無効にし、可能であれ ば 出 力 に "NMAGIC" と印を付けます。 |
−N |
−−omagic |
テキストセクションとデータセクションを読み書き可能に設定します。ま た、データセグメントのページアラインメントも行いません。共有ライブ ラリとのリンクもできなくなります。出力形式が Unix 形式のマジックナ ンバをサポートしている場合、出力に "OMAGIC" と印を付けます。注 意: PE-COFF ターゲットに対して、書き込み可能なテキストセクションは許さ れていますが、これは Microsoft が発行している形式仕様には適合し て いません。 |
−−no−omagic |
こ のオプションは、−N オプションの持つ効果のほとんどを否定します。 テキストセグメントを読み込み専用とし、データセグメントを強制 的 に ページアラインメントします。このオプションは共有ライブラリとのリン クを有効にしないことに注意して下さい。共有ライブラリとのリンクのた めには、 −Bdynamic を使用して下さい。 |
−o output |
−−output=output |
output を、ld によって生成されるプログラムの名前として使用します。 このオプションが指定されなかった場合、a.out という名前がデフォルト で使用されます。スクリプトコマンドの "OUTPUT" によっても、出力ファ イル名を指定することができます。 |
−O level |
level が 0 より大きい数値であった場合、 ld は出力を最適化しま す。 これにはとても長い時間がかかりますので、最終的なバイナリの作成時の み有効にするべきでしょう。 |
−q |
−−emit−relocs |
最終的にリンクされた実行形式中に、再配置セクションと内容を残 し ま す。これらの情報は、リンク後の分析・最適化ツールが実行形式を正しく 変更するのに必要となるでしょう。これは、より大きな実行形式を生成し ます。 こ のオプションは、現在 ELF プラットフォームでしかサポートされてい ません。 |
−r |
−−relocatable |
再配置可能な出力を生成します。つまり、ld への入力として利用でき る 出力ファイルを生成します。これはよく 部分リンク と呼ばれます。この 副作用として、Unix の標準のマジックナンバをサポートする環境で は、 このオプションは出力ファイルのマジックナンバを "OMAGIC" に設定しま す。このオプションが指定されなかった場合は、絶対アドレス値を用いた ファ イルが生成されます。 C ++ プログラムをリンクする場合、このオプ ションはコンストラクタへの参照を解決しません。そのような場合は −Ur を使用してください。 入力ファイルが出力ファイルと同じ形式ではない場合、部分リンクは、入 力ファイルが再配置セクションを全く持たない時のみサポートされます。 異なった出力形式は、さらなる制限を持つことがあります。例えば、ある "a.out" ベースの形式は、入力ファイルが異なった形式であった時には、 部分リンクを全くサポートしません。 このオプションは、−i と同じです。 |
−R filename |
−−just−symbols=filename |
シンボル名やそのアドレスを filename から読み込みますが、それを再配 置したり出力に含めることはしません。これにより、出力ファイルが他の プログラムで定義されたメモリの絶対位置をシンボルで参照できるように なります。このオプションは 2 回以上使って構いません。 他の ELF リンカとの互換性のため、−R オプションの後にファイル名では な く ディレクトリ名が続いた場合、 −rpath オプションとして扱われま す。 |
−s |
−−strip−all |
すべてのシンボル情報を出力ファイルから削除します。 |
−S |
−−strip−debug |
(すべてのシンボルではなく) すべてのデバッグ用シンボル情報 を 出 力 ファイルから削除します。 |
−t |
−−trace |
ld が入力ファイルを処理するたびに、入力ファイル名を表示します。 |
−T scriptfile |
−−script=scriptfile |
scriptfile をリンカスクリプトとして使用します。このスクリプトは、( 追加されるのではなく) ld のデフォルトのリンカスクリプトを置き換 え ま す。したがって、scriptfile には、出力ファイルを記述するのに必要 なすべてのことを指定しなければなりません。 scriptfile がカレ ン ト ディレクトリに存在しない場合、 "ld" は、すべての −L オプションに続 いて指定されたディレクトリを検索します。複数の −T オプションは、一 つにまとめられます。 |
−u symbol |
−−undefined=symbol |
強制的に symbol を未定義シンボルとして出力ファイルに含めます。こう することによって、例えば標準ライブラリからさらにモジュールをリンク す る 引き金とすることができます。異なるオプション引数を持つことで −u を繰返し指定することができ、未定義シンボルを追加します。この オ プションは、"EXTERN" リンカスクリプトコマンドと同じです。 |
−Ur |
C ++ プログラム以外に対しては、このオプションは −r と同じで す。再配置可能な出力、つまり ld に再度入力可能な出力ファイルを生成 し ます。 C ++ プログラムをリンクする場合、−r とは異なり、 −Ur はコ ンストラクタへの参照を解決します。 −Ur を使用してリンクされた ファ イ ルに対しては、 −Ur を使用できません。コンストラクタのテーブルが 一度生成されると、追加することができないのです。 −Ur は、最後の 部 分リンクのみに使用するようにして、その他の場合は −r を使用してくだ さい。 |
−−unique[= SECTION ] |
SECTION に一致した入力セクションごとに、個別の出力セクションを生成 し ます。オプションのワイルドカード SECTION 引数がない場合は、親な し入力セクションごとに、個別の出力セクションを生成します。親なしセ クションとは、リンカスクリプト中に明示的に記述されていないセクショ ンです。このオプションは、コマンドライン上で複数回使用できます。こ れによって、通常の同名の入力セクションのマージを行わないようにしま す。これは、リンカスクリプト中での出力セクションの割り当てを上書き します。 |
−v |
−−version |
−V |
ld のバージョン番号を表示します。 −V オプションは、サポートし ているエミュレータの一覧も表示します。 |
||
−x |
−−discard−all |
すべてのローカルシンボルを削除します。 |
−X |
−−discard−locals |
すべての一時的なローカルシンボルを削除します。ほとんどのターゲット において、それは名前が L で始まるすべてのローカルシンボルです。 |
−y symbol |
−−trace−symbol=symbol |
リ ン ク されたファイルのうち、symbol が現れるファイル名を表示しま す。このオプションは何度でも指定できます。多くのシステム上では、シ ンボル名の前にアンダスコアをつける必要があるでしょう。 このオプションは、リンク中に未定義シンボルが発見されたが、それがど こから参照されているのかがわからない場合に役に立ちます。 |
−Y path |
デフォルトのライブラリ検索パスに path を追加します。このオプション は、Solaris との互換性のために存在します。 |
−z keyword |
認識されるキーワードは次のとおりです。 |
combreloc |
複数の再配置セクションを結合し、動的シンボル検索キャッシュ処理 を可能にします。 |
defs |
オブジェクトファイル中の未定義シンボルを許しません。共有ライブ ラリ中の未定義シンボルは許されます。 |
initfirst |
このオプションは共有オブジェクトを構築しているときにのみ意味が あります。オブジェクトに印を付け、そのオブジェクトの実行時初期 化処理が、他のすべてのオブジェクトがプロセスに導入されるより前 に、同時に生じるようにします。同様に、そのオブジェクトの実行時 終了処理が、他のすべてのオブジェクトの実行時終了処理が終った後 に生じるようにします。 |
interpose |
シンボルテーブルが主実行形式以外のすべてのシンボルの前に挿入さ れるように、オブジェクトに印を付けます。 |
loadfltr |
フィルタが実行時に直ちに処理されるように、オブジェクトに印を付 けます。 |
muldefs |
複数回の定義を許可します。 |
nocombreloc |
複数の再配置セクションの結合を無効にします。 |
nocopyreloc |
再配置セクションの複製生成を無効にします。 |
nodefaultlib |
依存関係検索の際に、デフォルトライブラリ検索パスを無視するよう に、オブジェクトに印を付けます。 |
nodelete |
実行時にロード解除 (unload) されないように、オブジェクトに印を 付けます。 |
nodlopen |
"dlopen" が適用できなくなるように、オブジェクトに印を 付 け ま す。 |
nodump |
"dldump" によりダンプできなくなるように、オブジェクトに印を付 けます。 |
now |
実行可能ライブラリまたは共有ライブラリを生成するとき に、 関数が最初に呼び出されるまで関数呼び出し解決を遅らせるのではな く、プログラムの実行開始時または、共有ライブラリが dlopen を使 いリンクする際にすべてのシンボルを解決するように動的リンカに教 えるために、ライブラリに印を付けます。 |
origin |
$ORIGIN を含むかもしれないオブジェクトに印を付けます。 |
他のキーワードは、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 オプションが追加されました。 |
−−as−needed |
−−no−as−needed |
このオプションは、コマンド行で指定した動的ライブラリで −−as−needed オプションより後のものの ELF DT_NEEDED タグに影響を与え ま す。 通 常、 リンカは コマンドラインで指定した動的ライブラリそれぞれに対し それらが実際に必要かどうかに無関係に DT_NEEDED タグを追加しま す。 −−as−needed により、通常オブジェクトから何らかの参照を満たすライブ ラリにのみ DT_NEEDED タグを付けるようになりま す。 −−no−as−needed によりデフォルトの動作に戻ります。 |
−assert keyword |
このオプションは、SunOS との互換性のために無視されます。 |
−Bdynamic |
−dy |
−call_shared |
動的ライブラリとリンクします。これは、共有ライブラリをサポートする プラットフォーム上でのみ意味を持ちます。このオプションは、そのよう な プ ラットフォーム上では、普通デフォルトとなっています。このオプ ションに異なる形式があるのは、様々なシステムとの互換性のためです。 このオプションは、コマンド上で何度でも使用することができます。これ は後に続く −l オプションのライブラリ検索に影響します。 |
−Bgroup |
動的セクション中の "DT_FLAGS_1" エントリの "DF_1_GROUP" フラグを設 定します。これによって、動的リンカがこのオブジェクトとその依存関係 の検索を グ ルー プ 内 で の み 実 行 す る よ う に な り ま す。 −−no−unresolved-symbols=report-all が暗黙に指定されます。このオプ ションは、共有ライブラリをサポートする ELF プラットホーム上での み 意味を持ちます。 |
−Bstatic |
−dn |
−non_shared |
−static |
共有ライブラリをリンクしません。これは、共有ライブラリをサポートす るプラットフォーム上でのみ意味を持ちます。このオプションに異なる形 式 が あるのは、様々なシステムとの互換性のためです。このオプション は、コマンドライン上で何度でも使用することができます。これは後に続 く −l オ プションのライブラリ検索に影響します。このオプションは −−unresolved−symbols=report−all も暗黙のうちに含みます。 |
−Bsymbolic |
共有ライブラリを生成する際に、その共有ライブラリ中に定義があれば、 グローバルシンボルへの参照をその定義に結びつけます。通常、共有ライ ブラリをリンクしたプログラムは、その共有ライブラリ中の定義を上書き で き ま す。このオプションは、共有ライブラリをサポートする ELF プ ラットホーム上でのみ意味を持ちます。 |
−−check−sections |
−−no−check−sections |
セクションアドレスが割り当てられた後、それらのアドレスが重なってい ないかどうかのチェックをしないようリンカに指示します。通常、リンカ はチェックを行い、重なりを発見した時は適切なエラーメッセージを出力 します。リンカは、オーバレイセクションのことを知っており、それを生 成することを許可します。コマンドラインスイッチ −−check−sections を 使用することで、デフォルトの動作に戻せます。 |
−−cref |
相 互 参照テーブルを出力します。リンカマップファイルが生成される場 合、相互参照テーブルはマップファイルに出力されます。それ以外 の 場 合、標準出力に出力されます。 テーブル形式は、意図的に簡単にしているので、必要な場合はスクリプト で簡単に処理することができます。シンボルは、名前でソートされて出力 されます。それぞれのシンボルごとに、ファイル名がリストされます。シ ンボルが定義されている場合は、リストの最初のファイルにその定義が含 ま れ ています。残りのファイルは、そのシンボルへの参照を含んでいま す。 |
−−no−define−common |
このオプションは、コモンシンボルへのアドレス割り当てを抑制します。 ス クリプトコマンド "INHIBIT_COMMON_ALLOCATION" は、同じ効果を持ち ます。 −−no−define−common オプションは、コモンシンボルへアドレスを割り 当 て る 判断を、出力ファイルのタイプの選択から切り離します。このオプ ションを指定しない場合は、再配置不可の出力タイプによって、アドレス は強制的にコモンシンボルへ割り当てられます。 −−no−define−common を 使用することにより、共有ライブラリから参照されるコモンシンボルは、 主プログラムのアドレスのみに割り当てられます。このオプションは、共 有ライブラリ中の重複した未使用領域を削除します。また、動的シンボル 解決するために特殊な検索パスを持つたくさんの動的モジュールがある場 合、間違った重複を解決する際に起こり得る混乱を防ぎます。 |
−−defsym symbol=expression |
expression で指定される絶対アドレスを含んだグローバルシンボル を、 出力ファイルに生成します。複数のシンボルを定義するために、コマンド ライン上で必要な回数だけこのオプションを使用できます。 expression には、限定された形式の算術演算がサポートされてます。 16 進定数や存 在するシンボル名が使用でき、 16 進定数やシンボルの加減算に "+" や "−" を使用できます。もっと複雑な式が必要であれば、スクリプトからリ ンカのコマンド言語を使用することを検討してください。 注意: symbol や等号 (‘‘=’’)、expression の間に空白を入れてはいけません。 |
−−demangle[=style] |
−−no−demangle |
これらのオプションは、エラーメッセージやその他の出力に含まれるシン ボル名をデマングルするかどうかを制御します。デマングルする場合、リ ンカはシンボル名を読みやすい形式で表現しようと試みます。つまりリン カは、先頭のアンダスコアがオブジェクトファイル形式で使用されていた 場合、それを取り除き、C ++ のマングルされたシンボル名をユーザが読み やすい名前に変換します。コンパイラによってマングル形式は異な り ま す。デマングル形式引数を指定することにより、使用しているコンパイラ に対応したデマングル形式を選択できます。 リ ン カ は、 環 境 変 数 COLLECT_NO_DEMANGLE が設定されていない限り、デフォルトでデマングル します。これらのオプションによって、デフォルトを上書きできます。 |
−−dynamic−linker file |
動的リンカの名前を設定します。これは、動的にリンクされる ELF 実 行 形式を生成する時のみ意味があります。通常は、デフォルトの動的リンカ で正しいはずです。自分が何をしようとしているのかがわかってる場合以 外は、使用しないでください。 |
−−embedded−relocs |
このオプションは、 GNU コンパイラとアセンブラに −membedded−pic オプ ションを指定して生成した MIPS の埋め込み PIC コードをリンクする 時 のみ意味があります。これを指定すると、リンカはあるテーブルを生成し ます。このテーブルは、ポインタの値に静的に初期化されているすべての デー タ を、 実 行 時 に 再 配 置 す る た め に 使 われます。詳細 は、testsuite/ld−empic のコードを参照してください。 |
−−fatal−warnings |
すべての警告を、エラーとして扱います。 |
−−force−exe−suffix |
出力ファイルのサフィックスが .exe となるようにします。 このオプションを指定すると、無事に生成され完全にリンクされた 出 力 ファイルに ".exe" や ".dll" というサフィックスがついていなかった場 合、リンカは出力ファイルを、同じ名前に ".exe" サフィックスをつけた ファイルにコピーします。このオプションは、Microsoft Windows ホスト 上で、未修正の Unix 用の makefile を使用する場合に便利です。という のも、Windows のいくつかのバージョンでは、 ".exe" サフィックスがつ いていないイメージを実行できないからです。 |
−−no−gc−sections |
−−gc−sections |
未使用の入力セクションのガーベージコレクションを有効にします。この オプションをサポートしていないターゲット上では無視されます。このオ プションは、−r とは互換性がありませんし、動的リンクと一緒に使う べ きでもありません。デフォルトの動作 (ガーベージコレクションを実行し ない) に戻すには、コマンドラインで −−no−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 |
通常は、シンボルが未定義バージョンを持つ場合、リンカはこれを無視し ます。このオプションは、未定義バージョンのシンボルを許さず、代りに 致命的なエラーを報告します。 |
−−no−warn−mismatch |
通常 ld は、不適当な入力ファイルをリンクしようとした場合、エラーを 発します。例えば、異なるプロセッサ向け、もしくは異なるエンディアン 向けにコンパイルされたものであるという場合です。このオプションを指 定すると、ld は、このような起き得るエラーをだまって許可します。 こ のオプションは、リンカのエラーが適切でないと分かっている特殊なこと した時のみ使用し、使用の際には注意しなくてはなりません。 |
−−no−whole−archive |
以後に続くアーカイブファイルに対して、 −−whole−archive オプショ ン の効果を無効にします。 |
−−noinhibit−exec |
利用可能ならいつも、実行形式の出力ファイルを残しておきます。普通リ ンカは、リンク処理中にエラーが発生した場合、出力ファイルを生成しま せん。どんなエラーが発生しても、出力ファイルを書かずに終了します。 |
−nostdlib |
コマンドライン上で明示的に指定されたライブラリディレクトリのみを検 索します。リンカスクリプト中で指定されたライブラリディレクトリは、 (コマンドライン上で指定されたリンカスクリプトであっても) 無視さ れ ます。 |
−−oformat output-format |
ld は、2 種類以上のオブジェクトファイルをサポートするように構成す ることができます。 ld がそのように構成されていた場合、−−oformat オ プションを用いて、出力ファイルのバイナリ形式を指定することができま す。しかし ld が別のオブジェクト形式をサポートするよう構成されてい たとしても、通常はこのオプションを指定する必要はありません。という のも、ld は、それぞれのマシン上で最もありふれた形式をデフォルト の 出 力形式とするよう構成されているはずだからです。 output-format は テキスト文字列で、 BFD ライブラリによってサポートされている特定の形 式 の名前です (objdump −i を用いて、利用可能なバイナリ形式をリスト できます)。スクリプトコマンド "OUTPUT_FORMAT" でも、出力形式を指定 することができますが、このオプションによって上書きされます。 |
−pie |
−−pic−executable |
位 置 独 立実行形式を生成します。現在のところ、これは ELF プラット フォームでのみサポートされています。位置独立実行形式は、共有ライブ ラリと同様に、 OS が選択した仮想アドレス (呼び出しごとに異なる) に 動的リンカにより再配置されます。動的リンクされた通常の実行形式のよ うに、位置独立実行形式は実行可能ですが、実行形式中で定義されるシン ボルは共有ライブラリにより上書きできません。 |
−qmagic |
このオプションは、Linux 互換性のために無視されます。 |
−Qy |
このオプションは、 SVR4 互換性のために無視されます。 |
−−relax |
マシン依存の効果を持つオプションです。このオプションをサポートして いるターゲットは、少数です。 いくつかのプラットホームでは、−−relax オプションは、リンカがプログ ラム中のアドレッシングを解決できる場合に可能となる大域的な最適化を 実行します。これは、出力オブジェクトファイル中のアドレスモードの緩 和や、新規命令の合成などです。 いくつかのプラットホーム上では、このようなリンク時の大域的な最適化 によって、生成された実行形式のシンボリックデバッグが不可能となる場 合があります。不可能になることが知られているのは、松下 の MN10200 や MN10300 プロセッサファミリです。 こ れがサポートされていないプラットホームでは、 −−relax は受け付け られますが、無視されます。 |
−−retain−symbols−file filename |
ファイル filename 中にリストされたシンボルのみを残し、他のシンボル を すべて破棄します。 filename は、1 行ごとに 1 つのシンボル名が書 いてある単なる平坦なファイルです。このオプションは特に、実行時のメ モ リを節約するために、 1 つの大きい大域的なシンボルテーブルが徐々 に増えていく (VxWorks のような) 環境で役にたちます。 −−retain−symbols−file は、未定義シンボルや再配置に必要なシンボルは 廃棄しません。 −−retain−symbols−file は、コマンドライン上で 1 回しか指定すること ができません。これは、−s や −S を無効にします。 |
−rpath dir |
実行時ライブラリ検索パスへディレクトリを追加します。これは、 ELF 実 行 形 式 を 共有オブジェクトとリンクする時に使用されます。すべての −rpath の引数は結合され、動的リンカに渡されます。動的リンカは、 こ れらを用いて実行時に共有オブジェクトを検索します。 −rpath オプショ ンは、明示的にリンクされる共有オブジェクトによって必要とされる共有 オ ブ ジェ ク ト を 検 索 す る の に も使用されます。これについて は、−rpath−link オプションの記述を参照してください。 ELF 実行形 式 を リ ン ク す る 時 に −rpath が 使 用されてない場合、環境変数 "LD_RUN_PATH" の内容が定義されていれば、それが使われます。 −rpath オプションは、SunOS 上でも使用されます。 SunOS 上ではデフォ ルトで、リンカは指定されたすべての −L オプションから実行時検索パス を作成します。 −rpath オプションが指定された場合、実行時検索パスは −L オプションを無視し、−rpath オプションのみを用いて作成されます。 このオプションは、gcc を使用する時に役に立ちます。というの は、gcc は 沢山の −L オプションを追加し、それは NFS マウントされたファイル システム上にあるかもしれないからです。 他の ELF リンカとの互換性のために、−R オプションの後にファイル名で はなくディレクトリ名が続いた場合、 −rpath オプションとして扱われま す。 |
−rpath−link DIR |
ELF もしくは SunOS を使用した場合、ある共有ライブラリがもう 1 つ別 の 共有ライブラリを要求することがあります。これは、"ld −shared" と してリンクした時、入力ファイルの 1 つに共有ライブラリが含まれて い る場合に起こります。 非共有、再配置不可のリンクを行う時にリンカがそのような依存性に出合 うと、それが明示的にリンクされてない場合、リンカは要求された共有ラ イ ブ ラ リ を自動的に探し、リンクに含めようとします。そのような場 合、−rpath−link オプションは、検索する最初のディレクトリの組を指定 し ます。 −rpath−link オプションで一連のディレクトリ名を指定するに は、コロン区切りの名前のリストで指定してもいいですし、複数回 オ プ ションを指定しても構いません。 このオプションは注意深く使用しなければなりません。というのも、これ はコンパイル時に共有ライブラリに埋め込まれた検索パスを上書きしてし まうからです。そのような場合、動的リンカが使用するのとは違った検索 パスが、意図せずに使用されてしまうことがあります。 リンカは、要求された共有ライブラリを探す際に以下の検索パスを使用し ます。 |
1. |
−rpath−link オプションによって指定されたすべてのディレクト リ。 |
||
2. |
−rpath オプションで指定されたすべてのディレクトリ。 −rpath と −rpath−link の違いは、−rpath オプションで指定されたディレク トリは、実行形式に含められ実行時に使用されますが、 −rpath−link オプションは、リンク時にのみ影響します。これは、ネイティブのリ ンカ専用です。 |
||
3. |
ELF システム上で −rpath もしくは "rpath−link" オプションが 使 われなかった場合、環境変数 "LD_RUN_PATH" の内容が検索されま す。これは、ネイティブのリンカ専用です。 |
||
4. |
SunOS 上で −rpath が使われなかった場合、 −L オプションで指 定されたすべてのディレクトリが検索されます。 |
||
5. |
ネイティブのリンカの場合、環境変数 "LD_LIBRARY_PATH" の内 容。 |
||
6. |
ネイティブの ELF リンカ の 場 合、 共 有 ラ イ ブ ラ リ の "DT_RUNPATH" もしくは "DT_RPATH" 中のディレクトリが、必要とさ れる共有ライブラリの検索に使用されます。 "DT_RUNPATH" エントリ が存在した場合、 "DT_RPATH" エントリは無視されます。 |
||
7. |
デフォルトのディレクトリ。通常、/lib と /usr/lib です。 |
||
8. |
ELF シ ス テ ム 上のネイティブなリンカの場合、ファイル /etc/ld.so.conf が存在していたら、そのファイル中のディレクトリ のリスト。 |
要 求された共有ライブラリが見つからない場合、リンカは警告を出しリン クを継続します。 |
−shared |
−Bshareable |
共有ライブラリを作成します。現在これは、 ELF , XCOFF , SunOS 上のみで サポートされています。 SunOS 上では、−e オプションが使用されておら ず、リンク時に未定義シンボルが存在していれば、リンカは自動的に共有 ライブラリを作成します。 |
−−sort−common |
こ のオプションを指定すると、ld は、コモンシンボルを適切な出力セク ションに配置する際にサイズでソートします。最初にすべての 1 バイ ト の シンボルが配置され、次にすべての 2 バイトのシンボル、そしてすべ ての 4 バイトのシンボル、そしてその他のシンボルが配置されます。 こ のようにするのは、アラインメントの制約によってシンボルの間に隙間が 生じるのを防ぐためです。 |
−−split−by−file [size] |
−−split−by−reloc と同じですが、各々の入力ファイルに対し、 size に 達 す るたびに新しい出力セクションを作成します。 size が指定されな かった場合、デフォルトのサイズは 1 です。 |
−−split−by−reloc [count] |
ファイル中の 1 つの出力セクションが、count より多い再配置情報を 含 まないよう、出力ファイル中に余分なセクションを作成しようとします。 これは、 COFF オブジェクト形式のリアルタイムカーネルにダウンロー ド するための巨大な再配置可能ファイルを作成する時に役に立ちます。とい うのも、 COFF では 1 つのセクションは 65535 を越える再配置情報を 表 現することができないからです。このオプションは、任意のセクションを サポートしていないオブジェクトファイル形式では、うまくいかないこと に注意してください。リンカは、分配し直す際に個々の入力セクションを 分割しないので、 1 つの入力セクションが count を越える再配置情報を 含 んでいる場合、 1 つの出力セクションには、それだけの数の再配置情 報を含むことになります。 count のデフォルト値は 32768 です。 |
−−stats |
実行時間やメモリ使用量などといったリンカの処理に関する統計情報を、 計算し出力します。 |
−−traditional−format |
ター ゲットによっては、ld の出力が既存のリンカの出力といくつかの点 で異なることがあります。このスイッチを指定すると、 ld は既存のリン カの形式を使います。 例えば SunOS 上では、ld はシンボル文字列テーブル内の重複したエント リを 1 つにします。これによって、完全なデバッグ情報を持つ出力 ファ イ ルのサイズが、 30% 以上も小さくなります。残念なことに、SunOS の "dbx" プログラムは、生成されたファイルを読み込むことができま せ ん ("gdb" では問題ありません)。 −−traditional−format スイッチを指定す ると、重複したエントリを 1 つにまとめません。 |
−−section−start sectionname=org |
出力ファイル中のセクションを、org で指定された絶対アドレスに配置し ます。複数のセクションを配置させる場合、このオプションは、必要に応 じてコマンドライン中に何度でも指定することができます。 org は、 単 独の 16 進数でなければなりません。他のリンカとの互換性のために、16 進数の先頭に通常つける 0x を省略することができま す。 sectionname と等号 (‘‘=’’)、org の間には空白をはさむことができないことに注意し てください。 |
−Tbss org |
−Tdata org |
−Ttext org |
−−section−start と同じです。それぞれ ".bss", ".data", ".text" を sectionname とします。 |
−−unresolved−symbols=method |
未解決のシンボルをどのように扱うかを決定します。 method が取り得る 値は 4 種類あります。 |
ignore-all |
未解決シンボルを一切報告しません。 |
report-all |
未解決シンボルのすべてを報告します。これがデフォルトです。 |
ignore-in-object-files |
共有ライブラリが含む未解決シンボルを報告しますが、通常オブジェ クトファイルに由来する場合は無視します。 |
ignore-in-shared-libs |
通 常 オブジェクトファイルに由来する未解決シンボルを報告します が、共有ライブラリに由来する場合は無視します。動的バイナリを生 成する場合に有益な場合があり、その場合、動的バイナリが参照すべ き共有ライブラリすべてをリンカのコマンド行に含めておく必要があ ることが知られています。 |
共 有 ライブラリそれ自身に対する動作は −−[no−]allow−shlib−undefined オプションを使うことでもまた制御できます。 通常、リンカは、未解決シンボルの報告それぞれにたいして エ ラー メッ セージを生成しますが、オプション −−warn−unresolved−symbols により、 エラーを警告に変更することができます。 |
−−dll−verbose |
−−verbose |
ld のバージョン番号と、サポートしているリンカエミュレーションの 一 覧 を 表示します。また、どの入力ファイルがオープンできて、どの入力 ファイルがオープンできないのかも表示します。さらに、使用されるリン カスクリプトも表示します。 |
−−version−script=version-scriptfile |
リンカに、バージョンスクリプト名を指定します。これは通常、共有ライ ブラリを生成する際に使われ、生成するライブラリのバージョン階層につ いての付加的な情報を指定します。このオプションは、共有ライブラリを サポートする ELF プラットフォーム上でのみ意味があります。 |
−−warn−common |
コモンシンボルが、別の共有シンボルやシンボル定義と結びつけられた時 に警告を出します。 Unix のリンカは、このちょっといい加減な慣習を許 していますが、他のオペレーティングシステム上のリンカは、許していま せん。このオプションを指定すると、グローバルシンボルが結びつけられ ることから来る潜在的な問題を発見することができます。残 念 な こ と に、C ライブラリの中にはこの慣習を使用しているものがあり、プログラ ム中だけでなくライブラリ中のシンボルに対しても、この警告が出される ことがあります。 グローバルシンボルには 3 種類あります。以下で C 言語の例を使って説 明します。 |
int i = 1; |
定義です。出力ファイル中の初期化済みデータセクションに置かれま す。 |
extern int i; |
未定義参照です。メモリは割り当てられません。この変数に対する定 義かコモンシンボルが、どこかになくてはなりません。 |
int i; |
コモンシンボルです。変数に対して、(1 つもしくは複数の) コモ ン シンボルしかない場合、出力ファイルの非初期化データ領域に置かれ ます。リンカは、同じ変数に対する複数のコモンシンボルを、1 つの コ モ ンシンボルへとまとめます。それらのサイズか異なっていた場 合、最も大きなサイズの領域が取られます。同じ変数に対して定義が あった場合、リンカは共有シンボルを宣言に変換します。 |
−−warn−common オプションを指定すると、リンカは 5 種類の警告を出しま す。それぞれの警告は、2 行からなっています。最初の行は、今出会っ た シ ンボルを説明しており、次の行は、以前に同じ名前で出会ったシンボル を説明します。 2 つのシンボルの片方、もしくは両方は、コモンシンボル です。 |
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 |
グローバルコンストラクタが 1 つでも使われていた場合、警告を出し ま す。 これが役に立つファイル形式はわずかです。 COFF や ELF のような 形式では、リンカはグローバルコンストラクタが使用されていることを検 知できません。 |
−−warn−multiple−gp |
複数のグローバルポインタ値が出力ファイル中で必要とされる場合、警告 を出します。このオプションは、Alpha などの特定のプロセッサでのみ意 味があります。具体的に言うと、プロセッサの中には特別なセクション中 に大きな値の定数を置くものがあります。ある特殊なレジスタ (グローバ ルポインタ) がこのセクションの中央を指しており、ベースレジスタ相対 のアドレッシングモードを使用して、定数を効率的に読み込むことができ ます。ベースレジスタ相対モードのオフセットが、固定で比較的小さい ( 例えば 16bit) ため、これによって定数領域の最大サイズが制限されてし まいます。従って、大きなプログラムでは、すべての定数を参照するため に複数のグローバルポインタ値を使うことがしばしば必要となります。こ のオプションを指定すると、このようなケースが起きた時に警告を出しま す。 |
−−warn−once |
それぞれの未定義シンボルに対して、それを参照しているモジュールごと に警告を出すのではなく、ただ 1 度だけ警告を出します。 |
−−warn−section−align |
アラインメントによって出力セクションのアドレスが変更された場合、警 告を出します。一般的には、アラインメントはインプットセクションによ り設定されます。アドレスが変更されるのは、それが明示的に指定されな かった場合だけです。すなわち、"SECTIONS" コマンドが、そのセク ショ ンの開始アドレスを指定しなかった場合です。 |
−−warn−unresolved−symbols |
リ ン カ が 未 解 決 シ ン ボ ルを報告しようとするとき (オプション −−unresolved−symbols を参照)、普通はエラーを生成します。この オ プ ションは、エラーの代わりに警告を生成します。 |
−−error−unresolved−symbols |
これはリンカのデフォルトの動作で、未解決シンボルを報告しようとする ときエラーを生成します。 |
−−whole−archive |
コマンドライン上で −−whole−archive オプションの後に指定さ れ た 各 アーカイブに対して、そのアーカイブファイルの中の必要なオブジェクト ファイルだけを検索するのではなく、アーカイブ中のすべてのオブジェク トをリンクに含めます。これはアーカイブを共有ライブラリに変換する時 に普通使用され、生成する共有ライブラリ中にすべてのオブジェクトを強 制 的 に取り込みます。このオプションは、2 回以上使用しても構いませ ん。 このオプションを gcc から使用する際に、2 つ注意することが あ り ま す。 1 つ め は、gcc は こ の オ プションを知りません。ですか ら、−Wl,−whole−archive と指定しなければなりません。 2 つめは、アー カ イブをリストした後 −Wl,−no−whole−archive を使うことを忘れないよ うにしてください。というのは、gcc は自分でアーカイブのリストをリン クに追加することがあるので、これによる影響を受けないようにする必要 があるからです。 |
−−wrap symbol |
symbol に対して、ラッパ関数を使用します。すべての symbol への未 定 義 参 照 は、 "__wrap_symbol" へ と 解 決 さ れ ま す。すべての "__real_symbol" への未定義参照は、symbol へと解決されます。 これによって、システム関数に対するラッパを用意できます。ラッパ関数 は、"__wrap_symbol" という名前にする必要があります。ラッパ関数がシ ステム関数を呼びたい時には、 "__real_symbol" を呼び出すようにし ま す。 以下に簡単な例を示します: void * __wrap_malloc (size_t c) { printf ("malloc called with %zd\n", c); return __real_malloc (c); } −−wrap malloc を使用して、このファイルと一緒に他のコードをリンクし た場合、すべての "malloc" 呼び出しは、関数 "__wrap_malloc" を代 わ りに呼び出します。 "__wrap_malloc" 中の "__real_malloc" が、本当の "malloc" 関数を呼び出します。 同様にして "__real_malloc" 関数も用意しておくと、 −−wrap オプ ショ ン が 指 定 さ れ な かっ た場合にもリンクは成功します。その場合に は、"__real_malloc" の定義を "__wrap_malloc" と同じファイルにお い てはいけません。このようにすると、リンカがそれを "malloc" へとラッ プする前に、アセンブラがこの呼び出しを解決してしまうかもしれ ま せ ん。 |
−−enable−new−dtags |
−−disable−new−dtags |
こ の リンカは、 ELF システムの新しい動的タグを生成することができま す。しかし古い ELF システムは、それらを理解できない場合が あ り ま す。 −−enable−new−dtags を指定した場合、動的タグは必要に応じて作成 されます。 −−disable−new−dtags を指定した場合は、新しい動的タグ は 作成されません。デフォルトでは、新しい動的タグは作成されません。こ れらのオプションは、 ELF システム上でのみ利用可能であることに注意し てください。 |
i386 PE リンカは、−shared オプションをサポートしています。これを指定す ると、通常の実行形式ではなく動的リンクライブラリ ( DLL ) を出力します。こ のオプションを使用した時には、名前を "*.dll" とする必要があります。それ に加え、リンカは標準の "*.def" ファイルを完全にサポートしており、 オ ブ ジェ クトファイルと同様にリンカのコマンドライン上で指定できます (実際、 シンボルをエクスポートしているアーカイブの前に置いて、通常のオブジェ ク トファイルと同様にリンクされることを保証する必要があります)。 す べ てのターゲットに共通のオプションに加え、i386 PE のリンカは、 i386 PE ターゲットに固有のコマンドラインオプションを追加でサポートして い ま す。値を取るオプションは、1 つの空白か等号で値との間を区切ります。 |
−−add−stdcall−alias |
こ のオプションが指定された場合、stdcall サフィックス (@nn) を持つ シンボルを、そのままサフィックスを取ってエクスポートします。 [この オプションは i386 PE ターゲット用移植版リンカに特有のものです] |
−−base−file file |
dlltool を 使用して DLL を生成するのに必要なすべての再配置情報の ベースアドレスをセーブするファイル名を file とします。 [この オ プ ションは i386 PE 特有です] |
−−dll |
通常の実行形式の代わりに DLL を生成します。 −shared を使用すること もできますし、指定した ".def" ファイル中で "LIBRARY" を使用する こ と もできます。 [このオプションは i386 PE ターゲット用移植版リンカ に特有のものです] |
−−enable−stdcall−fixup |
−−disable−stdcall−fixup |
解決不能なシンボルを見つけると、リンカは「曖昧リンク」を試みます。 これは、シンボル名の形式 (cdecl 対 stdcall) だけが異なる別の定義済 みのシンボルを探し、一致したものへとリンクすることでシンボルを解決 し ます。例えば、未定義シンボル "_foo" は、関数 "_foo@12" へとリン クされ、未定義シンボル "_bar@16" は、関数 "_bar" へとリンクされ る かも知れません。リンカがこれを行う際に、警告を表示します。というの は、通常はリンクに失敗するべきであるからです。しかし、サー ド パー ティ の DLL から生成されたインポートライブラリを使用するのに、この 機能が時々必要となることがあります。 −−enable−stdcall−fixup を指定 し た 場 合、 こ の 機能は完全に有効化され、警告は出力されません。 −−disable−stdcall−fixup を指定した場合、この機能は無効化され、その よ う な 不 一致はエラーとみなされます。 [このオプションは i386 PE ターゲット用移植版リンカに特有のものです] |
−−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 ターゲット用移植版リンカに特有のものです] |
−−exclude−symbols symbol,symbol,... |
自動的にエクスポートすべきではないシンボルのリストを指定します。そ れらのシンボル名は、コンマもしくはコロンで区切られます。 [このオプ ションは i386 PE ターゲット用移植版リンカに特有のものです] |
−−exclude−libs lib,lib,... |
シンボルを自動的にエクスポートしないアーカイブライブラリのリストを 指定します。ライブラリ名はコ ン マ か コ ロ ン で 区 切 り ま す。 "−−exclude−libs ALL" と指定すると、自動エクスポートのすべてのアー カイブライブラリからシンボルを除去します。明示的に .def ファイルに リストされたシンボルは、本オプションにかかわらず、依然としてエクス ポートされます。 [このオプションは i386 PE ターゲット用移植版リ ン カに特有のものです] |
−−file−alignment |
ファイルのアラインメントを指定します。ファイル中のセクションは、常 にこの倍数のファイルオフセットから始まります。デフォルトは 512 で す。 [このオプションは i386 PE ターゲット用移植版リンカに特有のも のです] |
−−heap reserve |
−−heap reserve,commit |
このプログラムのヒープ領域に使うために予約する (オプションでコミッ トする) メモリ量を指定します。デフォルトでは 1Mb が予約され、4K が コミットされます。 [このオプションは i386 PE ターゲット用移植版 リ ンカに特有のものです] |
−−image−base value |
プ ロ グ ラムもしくは DLL のベースアドレスとして、value を使用しま す。これは、プログラムもしくは DLL がロードされた時に使われる、 最 も低位のメモリ位置となります。再配置する必要性を軽減し、DLL の性能 を向上させるため、各 DLL は一意なベースアドレスを持ち、他の DLL と 重 な ら ないようにすべきです。デフォルトでは、実行形式は 0x400000 で、DLL は 0x10000000 です。 [このオプションは i386 PE ターゲッ ト 用移植版リンカに特有のものです] |
−−kill−at |
こ のオプションが指定されると、stdcall のサフィックス (@nn) は、エ クスポートされる前にシンボルから取り除かれます。 [このオプションは i386 PE ターゲット用移植版リンカに特有のものです] |
−−major−image−version value |
「イメージバージョン」のメジャーナンバを設定します。デフォルトは 1 です。 [このオプションは i386 PE ターゲット用移植版リンカに特有 の ものです] |
−−major−os−version value |
「OS バージョン」のメジャーナンバを設定します。デフォルトは 4 で す。 [このオプションは i386 PE ターゲット用移植版リンカに特有の も のです] |
−−major−subsystem−version value |
「サブシステムバージョン」のメジャーナンバを設定します。デフォルト は 4 です。 [このオプションは i386 PE ターゲット用移植版リンカに特 有のものです] |
−−minor−image−version value |
「イ メー ジバージョン」のマイナナンバを設定します。デフォルトは 0 です。 [このオプションは i386 PE ターゲット用移植版リンカに特有 の ものです] |
−−minor−os−version value |
「OS バージョン」のマイナナンバを設定します。デフォルトは 0 です。 [このオプションは i386 PE ターゲット用移植版リンカに特有のも の で す] |
−−minor−subsystem−version value |
「サブシステムバージョン」のマイナナンバを設定します。デフォルトは 0 です。 [このオプションは i386 PE ターゲット用移植版リンカに特 有 のものです] |
−−output−def file |
リ ンカは、生成する DLL に対応した DEF ファイルを含むファイル file を作成します。この DEF ファイル ("*.def" と 呼 ば れ ま す) は、 "dlltool" を使ってインポートライブラリの作成に使用されたり、自動的 にもしくは暗黙にエクスポートされるシンボルへの参照として使用された り します。 [このオプションは i386 PE ターゲット用移植版リンカに特 有のものです] |
−−out−implib file |
リンカは、生成する DLL に対応したインポートライブラリを含むファ イ ル file を作成します。このインポートライブラリ ("*.dll.a" もしくは "*.a" と呼ばれます) は、生成された DLL をクライアントにリンクす る の に使われます。この動作によって、別に行う "dlltool" のインポート ライブラリ作成ステップを飛ばすことができます。 [このオプショ ン は i386 PE ターゲット用移植版リンカに特有のものです] |
−−enable−auto−image−base |
"−−image−base" 引数によって指定されなかった DLL のイメージベースを 自動的に選択します。 DLL 名から生成されるハッシュ値を使うことに よ り、 各 DLL に対して一意のイメージベースが作成され、プログラムの実 行を遅延させるメモリ内での衝突と再配置を回避することができます。 [ このオプションは i386 PE ターゲット用移植版リンカに特有のものです] |
−−disable−auto−image−base |
一意なイメージベースを自動的に作成しません。ユーザから指定されたイ メージベース ("−−image−base") がない場合、プラットフォームのデフォ ルトを使用します。 [このオプションは i386 PE ターゲット用移植版 リ ンカに特有のものです] |
−−dll−search−prefix string |
イ ン ポー ト ラ イ ブ ラリを使わずに DLL を動的にリンクする際に、 "lib<basename>.dll" よりも "<string><basename>.dll" を先に検索しま す。 こ の動作によって、様々な "subplatforms" 用に作られた native, cygwin, uwin, pw などの DLL を、容易に区別することができます。例え ば、一般的に Cygwin の DLL は、 "−−dll−search−prefix=cyg" を使用し ます。 [このオプションは i386 PE ターゲット用移植版リンカに特有 の ものです] |
−−enable−auto−import |
DLL からインポートするデータに対して、"_symbol" を "__imp__symbol" へと手の込んだリンクをし、それらの DATA エクスポートを持つインポー ト ライブラリの構築に際して、必要に応じてサンク (thunk) したシンボ ルを作成します。注意: ’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 からインポートされた配列変数に対して定数の イ ンデックスを使用する場合などがあります。すべての複数ワードの変数 ( 配列、構造体、long long など) は、このエラー条件を引き起こすことが あります。しかし、このエクスポートされた目障りな変数が、実際どんな データタイプであっても、ld は 常にこれを検知し、警告を発し、停止し ます。 エクスポートされた変数のデータタイプが何であろうと、この問題を解消 する方法がいくつかあります。 1 つの方法は、−−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 番目の方法は、目障りなシンボルを「自動インポー ト」するのを止めて、"__declspec(dllimport)" と印を付けることです。 しかし実際にこれをするには、コンパイル時に #define を使い、 DLL を 構築しようとしているのか、もしくは DLL とリンクするクライ ア ン ト コー ドを構築しようとしているのか、または単に静的ライブラリを構築/ リンクしようとしているのかを示さなければなりません。「定数オフセッ ト を 用いた直接アドレス」問題を解決するいくつかの方法を選択する際 に、一般的な現実世界での使用方法を考えなければなりません: 元のコード: --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 ター ゲット用移植版リンカに特有のものです] |
−−disable−auto−import |
DLL からインポートしたデータに対して、"_symbol" を "__imp__symbol" へ と、 手 の 込んだリンクをしないようにします。 [このオプションは i386 PE ターゲット用移植版リンカに特有のものです] |
−−enable−runtime−pseudo−reloc |
コードが −−enable−auto−import セクションで記述した表現を含む場合、 す なわち、 DATA が DLL から非ゼロオフセットを付けてインポートして いる場合、このスイッチは ’実行 時 疑 似 再 配 置 (runtime pseudo relocation)’ ベクタを生成します。このベクタは実行環境がクライアン トコードの中でそれらデータの参照を調整するために使用することができ ま す。 [このオプションは i386 PE ターゲット用移植版リンカに特有の ものです] |
−−disable−runtime−pseudo−reloc |
DLL からの、非ゼロオフセットの DATA インポートに対する疑似再配置情 報を生成しないようにします。これはデフォルトです。 [このオプション は i386 PE ターゲット用移植版リンカに特有のものです] |
−−enable−extra−pe−debug |
自動インポートしたシンボルのサンクに関して、付加的なデバッグ情報を 示 します。 [このオプションは i386 PE ターゲット用移植版リンカに特 有のものです] |
−−section−alignment |
セクションのアラインメントを設定します。メモリ中のセクションは、常 にこの倍数のアドレスから始まります。デフォルトは 0x1000 です。 [こ のオプションは i386 PE ターゲット用移植版リンカに特有のものです] |
−−stack reserve |
−−stack reserve,commit |
プログラムのスタックに使うために予約する (オプションでコミッ ト す る) メモリ量を指定します。デフォルトでは 2Mb が予約され、4K がコ ミットされます。 [このオプションは i386 PE ターゲット用移植版リ ン カに特有のものです] |
−−subsystem which |
−−subsystem which:major |
−−subsystem which:major.minor |
プ ログラムが実行されるサブシステムを指定します。 which の値で有効 なのは、"native", "windows", "console" そして "posix" です。 オ プ ションで、サブシステムのバージョンも指定することもできます。 [この オプションは i386 PE ターゲット用移植版リンカに特有のものです] |
環境変数 "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 (c) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, 2002, 2003, 2004 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". |
こ の日本語訳の作成にあたり、SRA の矢吹氏 (yabuki@sra.co.jp) の訳を参考 にさせていただきました。 |