[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2. 起動

GNU リンカ ld は, 広範な状況に対応することと 他のリンカとできるだけ互換性を維持することを目指している. その結果, その動作を制御するのにたくさんの選択肢があることになる.

2.1 コマンド行オプション  
2.2 環境変数  


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.1 コマンド行オプション

このリンカは, 多数のコマンド行オプションをサポートしているが, 実際には, そのほとんどがどの特定の文脈でも使われることがない. 例えば, ld の使われ方で多いのは, 標準の, サポートされている Unix システム上で標準の Unix のオブジェクトファイルをリンクすることである. このようなシステムで hello.o というファイルをリンクするには 以下のようにする.

 
ld -o output /lib/crt0.o hello.o -lc

これは, ld に, ファイル /lib/crt0.ohello.o, ライブラリ libc.a をリンクした結果として output という ファイルを生成することを指定する. ここで, ライブラリ libc.a は 標準の検索ディレクトリから得られる. (以下の `-l' オプションの説明を参照のこと. )

ld のコマンド行オプションのいくつかは, コマンド行のどの位置で 指定しても良い.ただし,`-l'`-T' のように,ファイルを 取るオプションは,オブジェクトファイルや他のオプションに対して, コマンド行でそのオプションが現れた位置でそのファイルを読み込ませることを 強制する. ファイルを取らないオプションは, 異なる引数を 与えて繰り返し指定しても, 繰り返す効果がないか, 前に(コマンド行で 左側に位置するもの)指定したそのオプションを上書きする. 複数回指定して意味のあるオプションは以下の説明で注意されている.

オプションでない引数はリンクして組み合わされるオブジェクトファイルか アーカイブである. コマンド行オプションの後に来ても, 前に来ても, 混じりあっても構わないが, オブジェクトファイル引数が, あるオプションとそのオプションの引数の 間に来てはいけない.

普通, リンカにはオブジェクトファイルを少なくとも一つ指定して起動するが, 他の形式のバイナリ入力ファイルを `-l', `-R' やスクリプト・ コマンド言語を使って指定することができる. バイナリ入力ファイルを 全く指定しないと, リンカは出力は一切生成せず, `No input files' というメッセージを出す.

リンカがオブジェクトファイルの形式を認識できない時は, それが リンカ・スクリプトであると仮定する. このようにして指定したスクリプトは, リンクに使われる主リンカ・スクリプト(デフォルトのリンカ・スクリプトか `-T' を使って指定したもの)に対し追加を行なう. この機能により, 一見オブジェクトファイルやアーアカイブに見えるが, 実は単に何かのシンボル値 を定義していたり, INPUTGROUP を使って他のオブジェクトを ロードしているだけのファイルをリンクすることができる. スクリプトをこのように指定するのは, 主となるリンカスクリプトに追加を 行ないときにだけ使うようにすべきである. SECTIONMEMORY コマンドのように, 論理的には一回しか現れてはいけないコマンドを使い たいのであれば, デフォルトのリンカスクリプトを `-T' オプションを 使って置き換えなければならない. See section 3. リンカスクリプト.

一文字名のオプションついては, オプションの引数は空白を入れずに オプション文字の直後に続けるか, それを必要とする オプションの直後に別個の引数として置かなければならない.

複数文字からなる名前のオプションについては, オプション名の前に 一つか二つのダッシュが付く. 例えば, `-trace-symbol'`--trace-symbol' は同じである. ただし,この規則の例外が一つある. 複数文字オプションのうち,小文字の 'o' ではじまるものは, ダッシュを二つつける必要がある.これは,`-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' に同じであり, その他の二つのキーワードは 機能的に `-Bdynamic' に同じである. このオプションは何回指定しても良い.

-Aarchitecture
--architecture=architecture
現在のリリースの ld では, このオプションは Intel 960 シリーズの アーキテクチャの場合にのみ意味を持つ. Intel 960 用の ld の コンフィギュレーションでは, 引数 architecture により 960 シリーズの 特定のアーキテクチャを指定し, 幾つかの保護機構を有効にし, アーカイブ ライブラリの検索パスを変更する. 詳細については, See section ld and the Intel 960 family.

ld の将来のリリースでは, 他のアーキテクチャについても 同様な機能をサポートする可能性がある.

-b input-format
--format=input-format
ld は, 複数種類のオブジェクトファイルをサポートするように コンフィギュレーションすることが可能である. 読者のところの ld がそのようにコンフィギュレーションされていれば, コマンド行で `-b' オプションの後に指定することで, 入力オブジェクトファイルの バイナリ形式を指定することができる. ld が複数のオブジェクト ファイル形式に対応するようコンフィギュレーションされている場合でも, 普通は入力形式を指定する必要はない. ld は, デフォルトの 入力形式としてそれぞれの機種でもっとも良く使われる形式を想定するよう コンフィギュレーションされている筈だからである. input-format は テキスト文字列であり, BFD ライブラリがサポートしている特定の形式の 名前である. (`objdump -i' で利用可能なバイナリ形式の一覧を 得ることができる. ) See section 5. BFD.

このオプションを使って普通でないバイナリ形式のファイルをリンクする ことができる. また, `-b' を使って明示的に形式を切り替える こともできる(異なる形式のオブジェクトファイルを複数リンクする時). このためには, ある特定の形式のオブジェクトファイルのグループ毎に その前に `-b input-format' を指定する.

デフォルトの形式は環境変数 GNUTARGET から取られる. See section 2.2 環境変数. また, スクリプトから入力形式を定義することもできる. それには TARGET コマンドを使う. 3.4.3 オブジェクトファイル形式を扱うコマンド を参照.

-c MRI-commandfile
--mri-script=MRI-commandfile
MRI製のリンカとの互換性のため, ld は別の形式の限定されたコマンド 言語で書かれたスクリプトファイルを受け付ける. この言語については MRI Compatible Script Files で説明している. MRI スクリプトファイルは `-c' オプションを使って指定する. 汎用の ld スクリプト言語で書かれたリンカ・スクリプトを実行 するには `-T' オプションを使う. MRI-cmdfile が存在しない場合, ld は, `-L' オプションで指定されたディレクトリを探しにいく.

-d
-dc
-dp
この三つのオプションは同じである. 複数の形式があるのは 他のリンカとの互換性を取るためである. このオプションは, 再配置可能な出力ファイルを指定された場合(`-r' により)でも コモン・シンボルにスペースを割り当てる. スクリプトのコマンド FORCE_COMMON_ALLOCATION も同じ効果を持つ. See section 3.4.4 その他のリンカスクリプトコマンド.

-e entry
--entry=entry
entry をプログラムの実行開始点を明示的に示すシンボルとして, デフォルトの入口点の代わりに使う. entry という名前のシンボルが存在 しない場合,リンカは entry を数として解釈し,それを入口点のアドレス として使うことを試みる(この数は10進数として解釈される.頭に `0x' を つけると 16 進数,`0' をつけると 8 進数になる).デフォルトおよび入口点の 他の指定方法については See section 3.4.1 入口点の設定.

-E
--export-dynamic
動的リンクされた実行形式を作る時に, 全てのシンボルを動的シンボル表に 追加する. 動的シンボル表は, 実行時に動的オブジェクトから見える シンボルの集まりである.

このオプションを使わないと, 動的シンボル表はリンク時に指定した ある動的オブジェクトから参照されるシンボルのみを通常含むようになる.

dlopen を使って, 何か他の動的オブジェクトではなくて, そのプログラムが定義しているシンボルを参照し返す必要があるような 動的オブジェクトをロードするなら, そのプログラム自体をリンクする時に 恐らくこのオプションを使う必要があるだろう.

-EB
ビッグエンディアンのオブジェクトをリンクする.これは,デフォルトの 出力形式に影響する.

-EL
リトルエンディアンのオブジェクトをリンクする.これは,デフォルトの 出力形式に影響する.

-f
--auxiliary name
ELF 共有オブジェクトを作る時に内部の DT_AUXILIARY フィールドに 指定した名前を設定する. これにより, 動的リンカに対し, 共有オブジェクトのシンボル表を, 共有オブジェクト name の シンボル表に対する補助的なフィルターとして使うべきであることを 知らせる.

後であるプログラムにこのフィルターオブジェクトをリンクし, そのプログラムを 実行すると, 動的リンカが DT_AUXILIARY フィールドを見ることになる. 動的リンカがそのフィルターオブジェクトのなんらかのシンボルを解決するなら, まず最初に共有オブジェクト name に定義があるかどうかを検査する. ない場合は, 代わりにフィルターオブジェクトの定義を使う. 共有オブジェクト name は存在する必要はない. つまり, 共有オブジェクト name を使って, 特定の関数の別実装版を 提供することができる. おそらく, デバッグ目的や機種固有の性能目的の 版に使われるだろう.

このオプションは複数回指定して良い. DT_AUXILIARY エントリは, コマンド行に現れた順に作られる.

-F name
--filter name
ELF 共有オブジェクトを作る時, 内部の DT_FILTER フィールドに 指定された名前を設定する. これは動的にリンカに対し, 作成されようとしている共有オブジェクトのシンボル表を, 共有オブジェクト name のシンボル表に対するフィルターとして使うことを指示する.

プログラムをこのフィルターオブジェクトとリンクし, そのプログラムを 実行すると, 動的リンカが DT_FILTER フィールドを見にいく. 動的リンカは通常通りフィルターオブジェクトのシンボル表に従って シンボルの解決を行なうが, 実際にリンクするのは共有オブジェクト name にある定義に対してである. つまり, フィルターオブジェクトを 使うと, オブジェクト name が提供するシンボルのサブセットを 選ぶことができるのである.

旧式のリンカの中には, -F オプションを使って, コンパイラツール群 全体で入力と出力オブジェクトファイルの両方のオブジェクトファイル形式を 指定するものがある. GNU リンカはこれを行なうのに別の方法を取っている. -b, --format, --oformat オプション, リンカスクリプト の TARGET コマンド, それに環境変数 GNUTARGET である. GNU リンカは ELF 共有オブジェクトを作っているのでないときは -F オプションを無視する.

-fini name
ELF の実行形式や共有オブジェクトを作る際,その実行形式や共有オブジェクト がアンロードされたときに NAME を呼び出すようにする.これは,DT_FINI に この関数のアドレスを設定することで行なう.デフォルトでは,リンカは _fini を呼び出すべき関数として使う.

-g
無視される. 他のツールとの互換性のために提供されている.

-Gvalue
--gpsize=value
GP レジスタを使って最適化されるオブジェクトの最大の大きさを size に設定する. このオプションは, MIPS ECOFF のように 大きなオブジェクトと小さなオブジェクトを別々のセクションに配置する ことをサポートしているオブジェクトファイル形式でしか意味がない. その他のオブジェクトファイル形式の場合には無視される.

-hname
-soname=name
ELF 共有オブジェクトを作成する際に, 内部 DT_SONAME フィールドに 指定した名前を設定する. 実行形式を DT_SONAME フィールドのある 共有オブジェクトとリンクすると, その実行形式を実行させると, 動的リンカは, リンカに対して指定されたファイル名ではなく, DT_SONAME フィールドで指定された共有オブジェクトをロードしようとする.

-i
差分リンクを行なう(`-r' オプションに同じ).

-init name
ELF の実行形式や共有オブジェクトを作る際, その実行形式や共有オブジェクト がロードされたときに NAME を呼び出すようにする. これは, DT_INIT に この関数のアドレスを設定することで行なう.デフォルトでは, リンカは _init を呼び出すべき関数として使う.

-larchive
--library=archive
アーカイブファイル archive をリンクすべきファイルのリストに 加える. このオプションは何度使っても良い. ld は パスのリストから, 指定された archive 毎に libarchive.a が存在するかどうかを検索する.

共有ライブラリをサポートしているシステムでは, ld は, 拡張子が .a 以外のライブラリをも検索する. 特に, ELF システムと SunOS では, ld はあるディレクトリでライブラリを検索する時, 拡張子が .a のものよりも先に拡張子が .so のものを 探す. 約束により, .so という拡張子は共有ライブラリを表す.

リンカは, アーカイブを一回だけ, コマンド行で指定された位置で 検索する. そのアーカイブがあるシンボルを定義しており, そのシンボルが コマンド行のアーカイブより前に現れるオブジェクトで未定義であれば, リンカがアーカイブから適切なファイルを取り込む. 一方, コマンド行で アーカイブより後に現れるオブジェクトに未定義シンボルがあっても, もう一度アーカイブを検索しには行かない.

アーカイブを複数回検索するようにリンカに仕向ける方法については -( オプションのところを参照のこと.

同じアーカイブを複数回コマンド行に指定しても良い.

アーカイブのこういう検索の仕方は Unix のリンカでは普通である. ただし, AIX 上で ld を使う場合は, AIX のリンカの動作との 違いに注意する必要がある.

-Lsearchdir
--library-path=searchdir
searchdirld がアーカイブライブラリと ld 制御 スクリプトを検索するパスのリストに追加する. このオプションはいくつ指定しても良い. ディレクトリが検索される順番は コマンド行で指定された通りになり. コマンド行で指定したディレクトリは デフォルトのディレクトリの前に検索される. 全ての -L オプションが, 全ての -l オプションに適用される. これはオプションの現れる 順序によらない.

検索パスのデフォルトの組(`-L' による指定がない場合)は, ld がどのエミュレーションモードを使っているかに依存する. ある場合にはどのようにコンフィギュレーションされたかにも依存する. See section 2.2 環境変数.

検索パスはリンカスクリプトの中で SEARCH_DIR コマンドを 使って指定することもできる. この方法で指定したディレクトリは コマンド行上リンカスクリプトが現れたところで検索される.

-memulation
emulation リンカをエミュレートする. 使用できるエミュレーションは `--verbose' オプションまたは `-V' オプションで見ることができる.

`-m' オプションが指定されていない場合, 環境変数 LDEMULATION が定義されていればこれで指定したエミュレーションになる.

LDEMULATION も定義されていない場合, デフォルトのエミュレーションは リンカのコンフィギュレーションに依存する.

-M
--print-map
リンクマップを標準出力に表示する. リンクマップは リンクに関する情報を提供し, 以下のものが含まれる.

-n
--nmagic
テキストセグメントを読み出し専用に設定し, セクションのページ境界揃えを オフにし,可能であれば出力ファイルにマジック番号 NMAGIC を設定する.

-N
--omagic
テキストセクションとデータセクションを読み書き可能に設定する. また, データセグメントのページ境界への位置合わせをおこなわない. 出力形式が Unix 方式のマジック番号をサポートしているなら, 出力に OMAGIC というマジック番号を設定する.

-o output
--output=output
ld が生成するプログラム名として output を使う. このオプションを指定しないと, デフォルトで `a.out' が使われる. スクリプトのコマンド OUTPUT を使っても出力ファイル名を 指定することができる.

-O level
level が,ゼロより大きな数値であれば,出力を最適化する.これは 非常に時間がかかるので,最終的なバイナリでのみ有効にすべきだろう.

-q
--emit-relocs
再配置セクションと内容を最終的にリンクされた実行形式に残す. リンク後の解析・最適化ツールが,実行形式を正しく変更するのに この情報が必要になる.この結果,実行形式は大きくなる.

-r
--relocateable
再配置可能な出力を生成する. すなわち, ld への入力としても 使える出力ファイルを生成する. これは 部分リンクと呼ばれることも 多い. また, この副作用として, Unix の標準のマジック番号を使用している環境 では, 出力ファイルのマジック番号を OMAGIC に設定する. このオプションを指定しないと, 絶対アドレス値に置き換えられたファイルが 生成する. C++ のプログラムをリンクする時は, このオプションを指定しても コンストラクタに対する参照を解決しない. 解決するには, `-Ur' を 使う.

このオプションは `-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 は 出力ファイルを記述するのに必要なあらゆるものを指定しなければならない. リンカスクリプトに一回しか現れてはいけないコマンド, 例えば SECTIONS コマンドや MEMORY コマンドを使う時は このオプションを使用しなければならない. See section 3. リンカスクリプト. scriptfile が存在しない場合, ld は先行する `-L' オプションで指定されたディレクトリに探しに行く. 複数の `-T' オプションを指定すると蓄積されていく.

-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
一時的ローカルシンボルを全て削除する. ほとんどのターゲットでは, これは名前が `L' で始まる全てのシンボルになる.

-y symbol
--trace-symbol=symbol
リンクされたファイルのうち symbol が現れたもののファイル名を 表示する. このオプションは何回指定しても良い. 多くのシステムで, シンボル名にアンダースコアをつける必要のあるだろう.

このオプションは, リンク時に未定義シンボルがでたものの, どこでそれを 参照しているか分からない時に役に立つ.

-Y path
path をデフォルトのライブラリ検索パスに追加する. このオプションは Solaris との互換性のためにある.

-z keyword
認識されるキーワードは,initfirst, interpose, loadfltr, nodefaultlib, nodelete, nodlopen, nodump, now, origin である. その他のキーワードは,Solaris との互換性のためにあり, 無視される. initfirst は,オブジェクトに,実行時に,他のどのオブジェクトよりも 先に初期化しなければならないという印をつける. interpose は,オブジェクトに,そのシンボル表を,主実行形式を 除く全てのシンボルの前に置くという印をつける. loadfltr は,オブジェクトに,そのフィルターが実行時に直ちに 処理されるという印をつける. nodefaultlib は,オブジェクトに,そのオブジェクトが依存するものを 検索する際に,デフォルトのライブラリ検索パスを無視するように印をつける. nodelete は,オブジェクトに,実行時にアンロードされないよう印をつける. nodlopen は,オブジェクトに,dlopen を適用できないと 印をつける. nodump は,オブジェクトに,dldump でダンプ出来ないという 印をつける. now は,オブジェクトに,実行時遅延バインディングでないという 印をつける. origin は,オブジェクトに,$ORIGIN を含む可能性があるという 印をつける.

-( archives -)
--start-group archives --end-group
archives はアーカイブファイルのリストを指定する. ファイル名そのものでも良いし, `-l' オプションでも良い.

指定されたアーカイブに対し, 新たな未定義参照がなくなるまで繰り返し 検索が行なわれる. 普通, ひとつのアーカイブはコマンド行で指定された 順に一回だけ検索が行なわれる. そのアーカイブ中のシンボルが, コマンド行上後ろに現れるアーカイブ中のオブジェクトが参照する 未定義シンボルを解決するのに必要な場合は, リンカはその参照を 解決できない. アーカイブをグループ化することで, 全ての参照が 解決されるまでグループの全てのアーカイブが繰り返し検索される.

このオプションを使うと性能が非常に落ちるので, 二個以上のアーカイブ の間で循環的な参照があり, それが避けられない場合にだけ使うのが よいだろう.

-assert keyword
このオプションは SunOS との互換性のためにあり, 無視される.

-Bdynamic
-dy
-call_shared
動的ライブラリをリンクする. これは共有ライブラリがサポートされている プラットフォームでしか意味がない. そのようなプラットフォームでは このオプションはデフォルトになっている. このオプションに色々 違った形式があるのは, 様々なシステムとの互換性を取るためである. このオプションは何度指定しても良い. このオプション以降の -l に対する検索に影響する.

-Bgroup
動的セクションの DT_FLAGS_1 エントリの DF_1_GROUP フラグを 設定する。これにより、実行時リンカが、このオブジェクトとその依存物内での 検索を、指定したグループ内でのみ実行するようになる。 --no-undefined が暗黙に指定される。 このオプションは、共有ライブラリをサポートする ELF プラットフォームでのみ 意味がある。

-Bstatic
-dn
-non_shared
-static
共有ライブラリをリンクしない. これは共有ライブラリがサポートされている プラットフォームでしか意味がない. このオプションはデフォルトになっている. このオプションに色々 違った形式があるのは, 様々なシステムとの互換性を取るためである. このオプションは何度指定しても良い. このオプション以降の -l に対する検索に影響する.

-Bsymbolic
共有ライブラリを作る時, グローバルシンボルへの参照を, その共有ライブラリ内に定義があれば, それに結び付ける. 通常, 共有ライブラリをリンクしたプログラムはその共有ライブラリ内の 定義を上書きすることができる. このオプションは, 共有ライブラリを サポートしている ELF プラットフォームでしか意味がない.

--check-sections
--no-check-sections
リンカに,セクションの割当後,セクションのアドレスを調べて, 重なりがあるかどうかを調べないように指示する. 通常,リンカはこの検査を実行し,重なりを見つけたら適切なエラー メッセージを出す.リンカは,オーバーレイセクションの事は知っており, その場合は重なりを許す.コマンド行オプション `--check-sections' を 使うと,デフォルトの動作に戻せる.

--cref
相互参照表を出力する. リンカマップファイルが生成される場合は, 相互参照表はそのマップファイルに出力される. それ以外の場合は, 標準出力に表示する.

この相互参照表の形式は意図的に簡単なものにしているので, 必要なら スクリプトを書いて簡単に処理できる. シンボルは名前でソートして 表示される. シンボル毎にファイル名のリストが与えられる. シンボルが 定義されているなら, リストの先頭のファイルに定義がある. それ以外のファイルはそのシンボルへの参照を含む.

--defsym symbol=expression
出力ファイルにグローバルシンボルを作り, expression で与えられる 絶対アドレスをその値とする. このオプションは必要なだけ何回でも 使って, コマンド行で複数のシンボルを定義することができる. 制限付の算術演算を, この場合, expression で使うことができる. 16進定数や既存のシンボル名, + または - を使っての 16進定数やシンボルの加算・減算を指定することができる. もっと複雑な式が必要なら, スクリプトを書いてリンカコマンド言語を 使うことをお勧めする(see section Assignment: Symbol Definitions). 注意. symbol と等号("="), それに expression の間には空白を置いてはいけない.

--demangle[=style]
--no-demangle
このオプションは,エラーメッセージやその他の出力で,シンボル名を デマングルするかどうかを制御する.デマングルする場合は,シンボル名を 読みやすい形で表示する.オブジェクトファイル形式で使用されていれば, 頭のアンダースコアを取り去り,C++ のマングルされたシンボル名を読みやすい 名前に変換する.コンパイラが違うとマングル形式も違っている.デマングル 形式引数を指定すると,コンパイラに合った適切なデマングル形式を選ぶ. リンカは,環境変数 `COLLECT_NO_DEMANGLE' が設定されていない限り, デフォルトでデマングルを行なう.これらのオプションを使うと, デフォルトを上書きできる.

--dynamic-linker file
動的リンカの名前を設定する. これは, 動的にリンクされた ELF 実行形式を 生成する時にだけ意味がある. デフォルトの動的リンカで普通は良いはずである. 自分で何をしようとしているのか分かっている時だけ使うこと.

--embedded-relocs
このオプションは MIPS の埋め込み PIC コードをリンクする時にのみ 意味があり, GNU コンパイラと GNU アセンブラに -membedded-pic オプションを指定するとこのオプションに 変換される. このオプションを指定すると, リンカはあるテーブルを作る. このテーブルを使って, 静的にポインタ値に初期化されているデータを, 全て実行時に再配置する. 詳細については `testsuite/ld-empic' を 参照のこと.

--force-exe-suffix
出力ファイルの拡張子が .exe になるようにする.

完全にリンクされた出力ファイルを無事構築できた時に, そのファイルに .exe.dll という拡張子がない場合, このオプションを 指定すると, リンカは出力ファイルを同じ名前に, 拡張子 .exe を つけたファイルにコピーする. このオプションは UNIX 用の Makefile を修正せずに Microsoft Windows 上で 使いたい時に役に立つ. Windows のバージョンによっては, 拡張子が .exe になっていないイメージを実行することができないからである.

--no-gc-sections
--gc-sections
使わなかった入力セクションのゴミ集めを有効にする.このオプションが サポートされていないターゲットでは無視される.このオプションは `-r' と互換性がないし,動的リンクと一緒に使うべきでもない. デフォルトの動作(ゴミ集めを実行しない)に戻すには,コマンド行で `--no-gc-sections' を指定すれば良い.

--help
コマンド行オプションの概要説明を標準出力に表示して終了する.

--target-help
ターゲット固有の全オプションの要約を標準出力に表示し,終了する.

-Map mapfile
リンクマップをファイル mapfile に出力する. 前出の `-M' オプションの定義を参照のこと.

--no-keep-memory
普通 ld は入力ファイルのシンボルテーブルをキャッシュすることで, メモリ使用量よりも速度を優先する. このオプションは, メモリ使用量を 最小にすることを指定する. これは必要な都度シンボル表を読み直すことで 行なわれる. 大きな実行形式をリンクした時に ld がメモリを 使い果たすような場合に必要になる.

--no-undefined
-z defs
通常,非シンボル的共有ライブラリを作る時は,未定義シンボルが 許され,残ったものは実行時ローダにより解決される.これらのオプションは そのような未定義シンボルを許さない.

--allow-shlib-undefined
`--no-undefined' が指定された場合でも共有オブジェクト中の未定義シンボルを 許す.実際の結果は,通常のオブジェクト中の未定義シンボルは やはりエラーを引き起こすが,共有オブジェクト中の未定義シンボルは 無視される. `--no-undefined' の実装は、実行時リンカが未定義 シンボルに出会うと詰まってしまうと想定している。 だが、未定義シンボルが共有ライブラリにあるのが普通であるシステムが 少なくとも一つ(BeOS)ある。そこでは、カーネルが、 どの関数が現在のアーキテクチャに最適化を選ぶように、ロード時に パッチを当てるのである。すなわち、動的に、適切な memset 関数を 選ぶのである。明らかに、HPPA 共有ライブラリに未定義シンボルがあるのも 普通である。

--no-warn-mismatch
普通 ld は, 組合せになんらかの問題のある入力ファイルを一緒に リンクするとエラーを出す. 例えば異なるプロセッサ用にコンパイルされた ものだったり, エンディアンが異なっているなどの場合である. このオプションを指定すると, ld はエラーを出さずにリンクを行なう. このオプションは注意して使わなければならない. リンカの出すエラーが 適切でないことを保証する特別な処理を行なわなければならない.

--no-whole-archive
このオプション以後に現れるアーカイブファイルに対して, --whole-archive オプションを無効にする.

--noinhibit-exec
利用可能なときはいつでも実行形式出力ファイルを残す. 通常, GNU リンカはリンク過程でエラーが発生した場合, 出力ファイルを 生成しない. エラーが発生したらそれがどんなものであれ, 出力ファイルを 書かずに終了するのである.

--oformat output-format
ld は, 複数の種類のオブジェクトファイルに対応するような コンフィギュレーションとすることができる. ld がそのような コンフィギュレーションになっている場合, `--oformat' オプションを 使って出力オブジェクトファイルのバイナリ形式を指定できる. ld が複数のオブジェクトファイル形式に対応するような コンフィギュレーションになっていても, 普通はこのオプションを指定する 必要はない. ld はデフォルトの出力形式として それぞれの機種でもっとも使いでのある形式を生成するように コンフィギュレーションされているはずだからである. output-format はテキスト文字列であり, BFD ライブラリが対応している, 特定の形式の 名前である. (利用可能なバイナリ形式は `objdump -i' で知ることが できる. ) スクリプトのコマンド OUTPUT_FORMAT を使っても 出力形式を指定することができるが, このオプションの方が優先する. See section 5. BFD.

-qmagic
このオプションは Linux との互換性のためにあり, 無視される.

-Qy
このオプションは SVR4 との互換性のためにあり, 無視される.

--relax
機種依存の効果を持つオプションである. このオプションをサポートしているターゲットは数個だけである. See section ld and the H8/300. See section ld and the Intel 960 family.

いくつかのプラットフォームでは, `--relax' オプションは, リンカがプログラム中のアドレス参照を解決する時に可能になる, グローバルな最適化を行なう. これは, 出力オブジェクトファイル中での アドレッシングモードの緩和と新しい命令の合成などである.

プラットフォームによっては,このようなリンク時のグローバル最適化により, 生成される実行形式のシンボリックデバッグが不可能になることがある. 不可能になることが知られているのは,松下 MN10200 と MN10300 プロセッサの シリーズである.

これがサポートされていないプラットフォームでは, `--relax' は受け付けた上で無視される.

--retain-symbols-file filename
where a large global symbol table is accumulated gradually, to conserve run-time memory. ファイル filename に列挙されているシンボルだけを保持し, 残りを全て捨てる. filename は単純なテキストファイルで, 一行にシンボル名を一つ書く. このオプションはとりわけ (VxWorks のような) 大きなシンボルテーブルを徐々に蓄積して, 実行時メモリ使用量を 押えるような環境で役に立つだろう.

`--retain-symbols-file' は, 未定義シンボルや再配置に必要なシンボルは 捨てない.

`--retain-symbols-file' はコマンド行上で一回しか指定できない. `-s'`-S' を打ち消す.

-rpath dir
実行時のライブラリ検索パスにディレクトリを追加する. これは, ELF 実行形式を共有オブジェクトとリンクする時に使われる. 全ての -rpath の引数は連結されて実行時リンカに渡される. 実行時リンカはそのパスを使って実行時に共有オブジェクトを探す. -rpath オプションは明示的にリンクされる共有オブジェクトに より必要とされる共有ライブラリを探すのにも使われる. -rpath-link オプションの説明を参照のこと. ELF 実行形式をリンクする時に -rpath を指定しないと, 環境変数 LD_RUN_PATH が定義されていればその内容が使われる.

-rpath オプションは SunOS でも使うことができる. SunOS では, GNU リンカはデフォルトで, 指定された -L オプションを 全てつなぎ合わせて実行時検索パスを構成する. -rpath オプションが 指定されると, 実行時検索パスは, -L オプションを無視し, -rpath オプションだけから作られる. これは gcc を使う時に 役に立つことがある. gcc は -L オプションをたくさん使い, それで 指定されたディレクトリがNFS マウントされたファイルシステム上に あることも多いからである.

他の ELF リンカとの互換性のために, -R オプションの後にくるのが, ファイル名ではなくてディレクトリ名である場合は, -rpath オプション として取り扱われる.

-rpath-link DIR
ELF または SunOS では, 一つの共有ライブラリがもう一つ別の共有ライブラリ を必要とすることがある. これは, ld -shared としてリンクした 場合に, 入力ファイルの一つとして共有ライブラリをリンクに含めた時に 起こる.

非共有, 再配置不可のリンクを行なう時にそのような依存関係に 出会うと, 明示的にリンクされていなければ, 自動的に必要な 共有ライブラリを探してリンクに含める. その場合, -rpath-link オプションは最初に探すべきディレクトリの 組を指定する. -rpath-link オプションで一連のディレクトリ名を 指定するには, ディレクトリ名をコロンで区切って並べても良いし, このオプションを複数回指定するのでも良い.

このオプションは注意して使う必要がある.共有ライブラリにハードコーディング された検索パスを上書きしてしまうからである.その場合, 実行時リンカが使うのとは異なる検索パスを意図せずに使ってしまう可能性がある.

GNU リンカは以下に示す検索パスから必要な共有ライブラリを探す.

  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_RUNPATHDT_RPATH のディレクトリが, それを必要とする共有ライブラリ に対し検索される. DT_RPATH のエントリは, DT_RUNPATH の エントリが存在する場合は無視される.
  7. デフォルトのディレクトリ. 通常は `/lib'`/usr/lib' である.
  8. ELF システムのネイティブリンカの場合,`/etc/ld.so.conf' という ファイルが存在すれば,そのファイルにあるディレクトリのリスト.

必要な共有ライブラリが見つからない場合は, 警告を出してリンクを 続行する.

-shared
-Bshareable
共有ライブラリを作る. 今のところ, ELF, XCOFF, SunOS のプラットフォームで のみ使用できる. SunOS では, GNU リンカは, リンク時に -e オプションが使われず, 未定義シンボルがある場合は 自動的に共有ライブラリを作る.

--sort-common
コモンシンボルを, 適切な出力セクションに置く際に大きさの順にソートする. 最初に大きさが 1 バイトのシンボルを全て置き, 次に 2 バイトのシンボル全て, その次に 4 バイトのシンボル全て, 次にそれ以外の全てという順になる. これは, アラインメントの制限によるシンボル間の隙間をなくすためである.

--split-by-file [size]
--split-by-reloc に似ているが, 入力ファイル毎に size に 達した時に新規に出力セクションを作る. size は,指定しない場合は デフォルトのサイズ 1 になる.

--split-by-reloc [count]
出力ファイル中に余分なセクションを作って, そのファイル中の一個の セクションに入る再配置情報の数が count 個を越えないようにする. これはたくさんの再配置情報のあるファイルを生成して, COFF 形式のリアルタイムカーネル にダウンロードするときに役に立つ. COFF は一個のセクションでは 65535 個を越える再配置情報を表現できないからである. これは, 任意個数のセクションをサポートしていないオブジェクトファイル形式 の場合にはうまくいかないことに注意. GNU リンカは, 分配し直す時に 個々の入力セクションを分割しないので, 一個の入力セクションに count 個を越える再配置情報が貼っていると, 一つの出力セクションに たくさんの再配置情報が入ることになる. count のデフォルト値は 32768 である.

--stats
リンカの処理について, 実行時間やメモリ使用量などの統計情報を 計算して表示する.

--traditional-format
ターゲットによっては 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
org を, それぞれ出力ファイルの bss, data, text セグメントの開始アドレスとする. org は一個の 16 進整数でなければ ならない. 他のリンカとの互換性のために, 通常 16 進値の頭につける `0x' は 省略してかまわない.

--dll-verbose
--verbose
ld のバージョン番号を表示し, サポートされている リンカ・エミュレーションの一覧を出力する. 入力ファイルのどれがオープンできて, どれがオープンできないかを 表示する. デフォルトの組み込みスクリプトを使っているなら, リンカスクリプトを表示する.

--version-script=version-scriptfile
リンカにバージョンスクリプト名を指定する. このオプションは普通共有ライブラリを作る時に使われ, 作成される ライブラリのバージョン階層についての付加的情報を指定する. このオプションは共有ライブラリをサポートする ELF プラットフォームでのみ 意味がある. See section 3.9 VERSION コマンド.

--warn-common
コモンシンボルが別のコモンシンボルかシンボル定義と結びつけられた時に 警告を出す. UNIX のリンカはこの昔ながらのちょっとした悪癖を許しているが, 他の OS のリンカには許していないものもある. このオプションを指定すると, グローバルシンボルを結び付けることによる 潜在的な問題を見つけることができる. ただし, C のライブラリの中には この習慣を使っているものがあるので, 読者自身のプログラムのなかの シンボルだけでなく, ライブラリ中のシンボルについても警告を受けとる 可能性がある.

グローバルシンボルには三つの種類がある. 以下に C 言語の例で説明する.

`int i = 1;'
定義. 出力ファイルの初期化済みデータセクションに置かれる.

`extern int i;'
未定義参照. メモリを確保しない. この変数の定義かコモンシンボルがどこかになければならない.

`int i;'
コモンシンボル. ある変数に対して(一つでも複数でも)コモンシンボルしかない 場合は, 出力ファイルの非初期化データ領域に置かれる. GNU リンカは, 同じ変数に対する複数のコモンシンボルをまとめて一つのシンボル とする. コモンシンボルの大きさが異なっている場合は, 最大の大きさを 選ぶ. GNU リンカは, 同じ変数の定義が存在する場合は, コモンシンボルを 宣言に変換する.

`--warn-common' オプションを指定すると, 5種類の警告を出す. どの警告も二行からなる. 一行目は問題となったシンボルについて説明し, 二行目は同じ名前の既に出現しているシンボルについて説明する. 二つのシンボルの片方あるいは両方がコモンシンボルとなる.

  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 のような形式では, GNU ld はグローバルコンストラクタを 使用していることを検知できない.

--warn-multiple-gp
複数のグローバルポインタ値が出力ファイルで必要とされる場合に警告を出す. これはある決まった種類のプロセッサ, 例えば Alpha のような場合にだけ 意味がある. 具体的に言うと, プロセッサの中には大きな値の定数を 特別なセクションに置くものがある. ある特殊なレジスタ(グローバルポインタ) がこのセクションの中央部分を指すようになっていて, ベースレジスタ相対の アドレッシングモードを使うことで定数を効率良くロードできるようになっている. ベースレジスタ相対モードで使えるオフセットは固定されており, 比較的小さい(例えば 16ビット)ので, これで定数領域の最大の大きさが 決まる. このため, 大きなプログラムでは, 全ての定数を参照できるように するために複数のグローバルポインタ値を使うことが必要になることが多い. そういう場合, このオプションを指定すると警告を発する.

--warn-once
各未定義シンボルについて, それを参照しているモジュール毎に 警告するのではなくて, 一回だけ警告する.

--warn-section-align
アラインメントのために出力セクションのアドレスが変わった時に 警告を出す. 普通は, アラインメントは入力セクションにより設定される. アドレスが変わるのは明示的に指定されていない場合だけである. すなわち, SECTIONS コマンドがそのセクションの開始アドレスを 指定していない場合である(see section 3.6 SECTIONS コマンド).

--whole-archive
コマンド行で --whole-archive オプションの後に指定された アーカイブ毎に, そのアーカイブの中から必要なファイルを探すのではなく, そのアーカイブ中の全てのオブジェクトファイルをリンクに含める. これは, 普通, アーカイブファイルを共有ライブラリに変換する時に 使われる. アーカイブ中の全てのオブジェクトを強制的に 出来上がる共有ライブラリに取り込むのである. このオプションは複数回 指定可能である.

このオプションを gcc から使う場合の注意点が二つある. 第一に,gcc はこのオプションのことを知らないので, -Wl,-whole-archive と指定する必要がある. 第二に,アーカイブを列挙した後で -Wl,-no-whole-archive を 指定するのを忘れないようにしないといけない.gcc は自分でアーカイブの リストをリンクに追加するので,このオプションがそちらには影響しないように する必要があるからである.

--wrap symbol
symbol に対しラッパ関数を使う. symbol に対する 未定義の参照は全て __wrap_symbol に解決される. __real_symbol に対する未定義の参照は全て symbol に解決される.

これを使うと, システムの関数に対するラッパを用意することができる. ラッパ関数は __wrap_symbol という名前にする必要がある. この関数がシステム関数を呼び出したい時には, __real_symbol を 呼び出すようにする.

以下に簡単な例を示す.

 
void *
__wrap_malloc (int c)
{
  printf ("malloc called with %ld\n", c);
  return __real_malloc (c);
}

このファイルを --wrap malloc を指定して他のコードとリンクすると, 全ての malloc の呼び出しは, 代わりに関数 __wrap_malloc を 呼び出す. __wrap_malloc の中の __real_malloc の呼び出しは 本物の malloc 関数を呼び出す.

__real_malloc 関数も用意しておけば, --wrap オプションを 指定せずにリンクしても大丈夫である. その場合, __real_malloc の 定義を __wrap_malloc と同じファイルに置いてはいけない. 同じファイルに置いてしまうと, GNU リンカが malloc の呼び出しに変える前に, アセンブラがその呼び出しを 解決してしまうからである.

--enable-new-dtags
--disable-new-dtags
このバージョンのリンカは,ELF の新しい動的タグを作ることができる. だが,古い ELF システムは,それを理解できない可能性がある. --enable-new-dtags を指定すると,新しい動的タグが必要に応じて作られる. --disable-new-dtags を指定すると,新しい動的タグは作られない. デフォルトでは,新しい動的タグは作られない.この二つのオプションは, ELF システムでのみ使用できる.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.1.1 i386 PE ターゲットに固有のオプション

i386 PE リンカは,-shared オプションをサポートしており, それを指定すると,出力は,通常の実行形式ではなく, 動的リンクライブラリ(DLL)になる.このオプションを使う時は, 出力を *.dll とすべきである.さらに,標準の *.def ファイルを完全にサポートしているので,オブジェクトファイルのように リンカのコマンド行に指定することができる(実際,シンボルをエクスポート しているアーカイブの前に置き,通常のオブジェクトファイルのように, リンクされることを保証すべきである.)

全ターゲットに共通のオプションに加えて,i386 PE リンカは, i386 PE ターゲットに固有のコマンド行を追加でサポートしている. 値を取るオプションは,空白一個か等号で値との間を区切る.

--add-stdcall-alias
このオプションを指定すると,stdcall のサフィックス(@nn)付きの シンボルをそのまま,サフィックスを取ってエクスポートする.

--base-file file
`dlltool' を使って DLL を生成するのに必要な全ての再配置の基底 アドレスをセーブするファイルを file とする.

--dll
通常の実行形式ではなく DLL を作成する.-shared を使っても良いし, 指定した .def ファイルで LIBRARY を使っても良い.

--enable-stdcall-fixup
--disable-stdcall-fixup
解決不可能なシンボルが見つかったら,「曖昧リンク」を試みる. これは,シンボル名の形式(cdecl 対 stdcall)だけが異なる別の定義済み シンボルを探し,そのシンボルを一致したものにリンクすることで解決する. 例えば,未定義シンボル _foo が関数 _foo@12 にリンクされ, 未定義シンボル _bar@16 が関数 _bar にリンクされるとしよう. これをリンカが行なう時,警告を出す.普通はこれはリンクに失敗すべきだから である.しかし,サードパーティの dll から生成したインポートライブラリを 使えるようにするのに,この機能が必要になることがある. --enable-stdcall-fixup を指定すると,この機能が完全に有効になり, 警告は表示されない.--disable-stdcall-fixup を指定するとこの 機能は使えなくなり,このような不一致はエラーとなる.

--export-all-symbols
このオプションを指定すると,DLL を構築するのに使われるオブジェクト中の 全てのグローバルシンボルが,その DLL によりエクスポートされる. こうしないとエクスポートされるシンボルが全くないという場合には, このオプションがデフォルトになる.シンボルが DEF ファイル経由で 明示的にエクスポートされたり,関数属性経由で暗黙にエクスポート される場合は,デフォルトでは,このオプションが指定されない限り, 何もエクスポートしない.シンボル DllMain@12, DllEntryPoint@0,impure_ptr は自動的には エクスポートされない.

--exclude-symbols symbol,symbol,...
自動的にエクスポートすべきでないシンボルの一覧を指定する. シンボル名は,カンマかコロンで区切る.

--file-alignment
ファイルのアラインメントを指定する.ファイル中のセクションは, 常に,この倍数のファイルのオフセットから始まる.デフォルトは 512 である.

--heap reserve
--heap reserve,commit
このプログラム用のヒープとして使うために予約すべき(オプションで,コミット すべき)メモリ量を指定する. デフォルトは 1Mb が予約され,4K がコミットされる.

--image-base value
プログラムや dll の基底アドレスとして value を使う.これは, 読者のプログラムや dll がロードされるときに使われる,最底位のメモリ 位置である.dll の再配置の必要性や性能を改善するために,各 dll は 一意的な基底アドレスを持つようにし,他の dll と重なり合わないように すべきである.デフォルトは,実行形式は 0x400000,dll は 0x10000000 である.

--kill-at
このオプションが指定されると,stdcall のサフィックス(@nn)が, エクスポートされる前にシンボルから取り去られる.

--major-image-version value
「イメージバージョン」のメジャー番号を設定する.デフォルトは 1 である.

--major-os-version value
「OS バージョン」のメジャー番号を設定する.デフォルトは 4 である.

--major-subsystem-version value
「サブシステムバージョン」のメジャー番号を設定する.デフォルトは 4 である.

--minor-image-version value
「イメージバージョン」のマイナー番号を設定する.デフォルトは 0 である.

--minor-os-version value
「OS バージョン」のマイナー番号を設定する.デフォルトは 0 である.

--minor-subsystem-version value
「サブシステムバージョン」のマイナー番号を設定する.デフォルトは 0 である.

--output-def file
リンカは,リンカが生成する DLL に対応する DEF ファイルを含む ファイル file を作る.この DEF ファイル (*.def と呼ばれる)を使って,dlltool でインポート ライブラリを作ったり,自動的あるいは暗黙にエクスポートされるシンボルへの 参照として使う.

--section-alignment
セクションのアラインメントを設定する.メモリ中のセクションは, 常に,この数の倍数のアドレスで始まる.デフォルトは 0x1000 である.

--stack reserve
--stack reserve,commit
このプログラムのスタック用に使用するために予約する(オプションで,コミット する)メモリ量を指定する.デフォルトは 32Mb 予約で,4K がコミットされる.

--subsystem which
--subsystem which:major
--subsystem which:major.minor
プログラムが実行されるサブシステムを指定する.which の 値として有効なのは,native,windows,console, posix である.オプションでサブシステムのバージョンを指定する こともできる.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.2 環境変数

環境変数 GNUTARGET, LDEMULATION, COLLECT_NO_DEMANGLEld の動作を変えることができる.

`-b' (あるいはその別名の `-format') を指定しない場合は, GNUTARGET により入力ファイルのオブジェクト形式が決まる. GNUTARGET の値は, 入力ファイル形式の BFD 名の一つでなければ ならない(see section 5. BFD). 環境変数 GNUTARGET が定義されていなければ, ld はそのターゲットに自然な形式を使う. GNUTARGETdefault に設定されていれば, BFD はバイナリ形式の入力ファイルを 調べて入力フォーマットを決めようとする. この方法は大体成功するが, 潜在的な曖昧さが残る. オブジェクトファイル形式を指定するのに 使われるマジック番号が一意的であると保証する方法がないからである. だが, 各システムでの BFD のコンギレーション手続きは, そのシステムに 自然な形式を検索リストの先頭に置くので, 曖昧さは自然なものに有利に なるように解決される.

LDEMULATION は, `-m' オプションを指定しない場合の デフォルトのエミュレーションを決定する. エミュレーションは リンカの動作の色々な面, 特にデフォルトのリンカスクリプトに影響する. 利用できるエミュレーションを表示するには, `--verbose' オプションか `-V' オプションを指定すれば良い. `-m' オプションを指定せず, 環境変数 LDEMULATION も定義されていないと, デフォルトの エミュレーションはリンカがどのようにコンフィギュレーションされたかに 依存する.

通常,リンカはデフォルトでシンボルのデマングルを行なうが, 環境変数 COLLECT_NO_DEMANGLE が設定されていると,デフォルトでは シンボルのデマングルを行なわなくなる.この環境変数は,リンカのラッパ プログラムである gcc でも同様に使われている.このデフォルトは, `--demangle'`--no-demangle' オプションで変えることが できる.


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by YABUKI Youichi on March, 15 2002 using texi2html