ld(1) FreeBSD 一般コマンドマニュアル

ld

前のページ 上に戻る 次のページ

ld




名称

       ld - GNU リンカ



書式

       ld     [-o output] objfile...
              [-Aarchitecture] [-b input-format] [-Bstatic]
              [-Bgroup] [-Bdynamic] [-Bsymbolic] [-c commandfile]
              [--cref] [-d|-dc|-dp]
              [-defsym symbol=expression] [--demangle]
              [--no-demangle] [-e entry] [-embedded-relocs] [-E]
              [-export-dynamic] [-f name] [--auxiliary name]
              [-F name] [--filter name] [-format input-format]
              [-g] [-G size] [-h name] [-soname name] [--help]
              [-i] [-lar] [-Lsearchdir] [-M] [-Map mapfile] [-m
              emulation] [-n|-N] [-noinhibit-exec]
              [-no-keep-memory] [-no-warn-mismatch] [-Olevel]
              [--oformat output-format] [-R filename] [-relax]
              [-r|-Ur] [-rpath directory] [-rpath-link directory]
              [-S] [-s] [-shared] [-sort-common]
              [-split-by-reloc count] [-split-by-file]
              [-T commandfile]
              [--section-start sectionname=sectionorg]
              [-Ttext textorg] [-Tdata dataorg] [-Tbss bssorg]
              [-t] [-u sym] [-V] [-v] [--verbose] [--version]
              [-warn-common] [-warn-constructors]
              [-warn-multiple-gp] [-warn-once]
              [-warn-section-align] [--whole-archive]
              [--no-whole-archive] [--wrap symbol] [-X] [-x]


解説

       ld はいくつかのオブジェクトとアーカイブファイルを結合 し、
       データを再配置してシンボル参照を解決します。コンパイルされ
       た新しいプログラムが実行可能になるように、多くの場合最終段
       階として ld が呼び出されます。

       ld  はリンク処理を明示的かつ総合的に制御する目的のリンカコ
       マンド言語のファイルを受け付けます。このマニュアルページで
       はコマンド言語についてふれません; コマンド言語の詳細と GNU
       リンカの別の側面からの詳細については `info' の `ld' の項、
       またはマニュアル ld: the GNU linker  を参照して下さい。

       こ の バージョンの ld はオブジェクトファイルの操作に汎用の
       BFD ライブラリを使います。これによって ld は多くの異なった
       形 式 -- 例えば COFF や a.out のようなオブジェクトファイル
       -- の読み込み、結合、書き込みが出来るようになっていま す。
       異なる形式のファイルを、利用可能ないずれかの形式のオブジェ
       クトファイルを生成するために一緒にリンクできます。`objdump
       -i' で各種アーキテクチャでサポートされる形式の一覧を得られ
       ます; objdump(1) を参照してください。

       んが、実際にはいかなる局面においてでも使用されるオプション
       は 少ししかありません。例えば、ld がよく使われるのは標準の
       Unix のオブジェクトファイルを、標準のサポートしている Unix
       シ ス テ ム 上 で リンクする場合です。そのようなシステムで
       は、hello.o というファイルをリンクするためには以下のように
       します:

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

       こ れ は、output   と い う 名 前 の ファ イルを、ファイル
       /lib/crt0.ohello.o そして標準で検索されるディレクト リ
       から来るライブラリ libc.a をリンクした結果として生成する事
       を、 ld に対して指示しています。

       ld へのコマンドラインオプションは任意の順番で、何度でも 繰
       り返してかまいません。大抵の場合、異なる引数でオプションを
       繰り返すとなんの効果も無いか、または以前のオプションの指定
       (コマンドラインでより左側にあるもの) を上書きします。

       例 外 -- 2 回以上 意味を持って指定できる-- は -A, -b (また
       は その同義語の -format),  -defsym,  --section-start,  -L,
       -l, -R, -u です。

       objfile として示されているひとまとめにリンクされるオブジェ
       クトファイルのリストは、コマンドラインオプションの後に続け
       ても、前に置いても、また混ぜてもかまいません; 引数 objfile
       をオプションフラグとその引数の間に置く事は出来ないので、こ
       れは守って下さい。

       通 常、リンカは少なくとも 1 つのオブジェクトファイルを指定
       して起動しますが、他の形式のバイナリ入力ファイルも -l,  -R
       を使って、そしてスクリプトコマンド言語で指定できます。バイ
       ナリ入力ファイルがまったく 指定されない 場合は、リンカは出
       力 ファ イルを生成しません。そして `No input files' という
       メッセージを出します。

       オプションの引数は空白をはさまずにオプション文字に続 け る
       か、その引数を必要とするオプションの直後に続けて独立した引
       数として与えなければなりません。


       -Aarchitecture
              現在リリースされている ld では、このオプ ショ ン は
              Intel  960   ファミリのアーキテクチャでのみ使われま
              す。そのような設定の ld では、引数 の  architecture
              に は 960 ファミリのメンバを指定する 2 文字の名称の
              いずれかを指定します; オプションは必要な出力のタ ー
              ゲッ トを指定して、入力ファイル中に非互換な命令があ
              れば警告します。またリンカがアーカイブライブラリ を
              検 索する方式も変更します。個々のアーキテクチャに特
              有なライブラリを使うようにするために、アー キ テ ク
              チャ を識別する文字列をサフィックスに加えた名前を検
              `-ACA' を指定した事によるものです。

              将来の ld のリリースでは他のアーキテクチャファミ リ
              でも同様の機能をサポートするかもしれません。

              ア ーキテクチャファミリがターゲットアーキテクチャの
              組合せを認めるのなら、意味を持ってコマンドライン 上
              で  2 回以上 -A を指定することが出来ます; -l でライ
              ブラリが指定される時に、それぞれの指定による別の 派
              生の名前のペアが検索のために追加されます。


       -b input-format
              コ マンドライン上でこのオプションに続いている入力オ
              ブジェクトファイルのバイナリ形式を指定します。通 常
              は これを指定する必要はありません。それぞれのマシン
              上で最も一般的な形式がデフォルトの入力形式である と
              期 待 するように、ld が設定されているからです。 in-
              put-format は文字列テキストで、BFD ライブラリでサポ
              ー トされる形式名です。 -format input-format と、ス
              クリプトコマンド中の TARGET も同じ機能です。

              ファイルを通常でないバイナリ形式とリンクする場合 に
              こ のオプションを使いたいかも知れません。 (異なる形
              式のオブジェクトファイルとリンクする時に) 同様に -b
              で明示的に形式を切り替えられます。その場合は -b in-
              put-format を特定の形式のオブジェクトファイルの各グ
              ループの前で指定します。

              デ フォ ルトの形式は環境変数 GNUTARGET からとられま
              す。スクリプトから入力形式を指定する事もでき、そ の
              場合は TARGET コマンドを使います。


       -Bstatic
              共 有ライブラリとリンクしません。これは共有ライブラ
              リをサポートしているプラットフォーム上でのみ意味 を
              持ちます。


       -Bdynamic
              ダ イナミックライブラリとリンクします。これは共有ラ
              イブラリをサポートしているプラットフォームでのみ 意
              味 を持ちます。そのようなプラットフォームでは通常こ
              のオプションがデフォルトです。


       -Bgroup
              DF_1_GROUP フラグを、動的セクションの DT_FLAGS_1 エ
              ン トリにセットします。これにより、実行時リンカが行
              うオブジェクト内の検索と依存関係の実行が、グルー プ
              内 に限定されます。未定義シンボルは許されません。共
              う  ld に指示します。読み込まれたコマンドは ld のデ
              フォルトのリンク形式を (付け加えるのではなく) 完 全
              に 置き換えます; commandfile には目的の形式を指示す
              るために必要な物をすべて書いておかなければなりま せ
              ん。


              リ ンクコマンドのスクリプトをコマンドラインで直接指
              定することも可能で、その場合はそれを文字 `{' と `}'
              で囲んで指定します。


       --cref  クロスリファレンステーブルを出力します。リンクマッ
              プファイルが生成されていれば、クロスリファレンス テ
              ー ブルがマップファイルに出力されます。そうでない場
              合は標準出力に表示されます。


       -d

       -dc

       -dp    これらの 3 つのオプションは等価です; 他のリンカとの
              互 換性のために複数の形式がサポートされています。再
              配置可能なファイルを出力するように指定され た 場 合
              (-r) でもコモンシンボルに空間を割り当てるよう ld に
              指示する場合に、いずれかを使います。スクリプト中 で
              の FORCE_COMMON_ALLOCATION コマンドも同じ効果を持ち
              ます。


       -defsym symbol=expression
              出力ファイル中に expression で与えられた絶対アド レ
              ス を持つグローバルシンボルを生成します。複数のシン
              ボルを定義するためにコマンドラインで必要回数だけ こ
              の オプションを指定してかまいません。この文脈では限
              定されますが expression として式を使う事ができます:
              16 進定数や定義済シンボル、または +- で 16 進定
              数や定義済シンボルの加減算を行えます。より手の込 ん
              だ 式が必要であれば、スクリプトからリンカコマンド言
              語を使う事を検討してください。


       --demangle

       --no-demangle
              このオプションは、エラーメッセージや他の出力にお い
              て、シンボル名を元に戻す (demangle する) か否かを制
              御します。リンカが元に戻すように指示された場合、 シ
              ン ボル名を可読形式にしようとします。すなわち、オブ
              ジェクトファイルが使用しているならば先頭のアンダ ス
              コアを削除し、 C++ で変換されたシンボル名をユーザが
              このオプションは、 -membedded-pic オプションを  GNU
              コ ンパイラとアセンブラに指定して生成した MIPS 組み
              込み用位置独立コードをリンクする場合にのみ意味を 持
              ち ます。これによってリンカは、ポインタ値に初期化さ
              れている静的変数を実行時に再配置するために利用で き
              る テーブルを生成するようになります。詳しくは test-
              suite/ld-empic にあるコードを参照してください。


       -E

       -export-dynamic
              ELF ファイルを生成する際に、すべてのシンボルを実 行
              時 シンボルテーブルに加えます。通常、実行時シンボル
              テーブルは実行時オブジェクトが使用するシンボルだ け
              を 含みます。このオプションは dlopen を使用する場合
              に必要です。


       -f name

       --auxiliary name
              ELF の共有オブジェクトを生成 す る 際 に、 内 部 の
              DT_AUXILIARY フィールドを指定した name にセットしま
              す。これは、共有オブジェクトのシンボルテーブル を、
              共 有オブジェクト name のシンボルテーブルに適用する
              補助のフィルタとして使う事を、実行時リンカに対し て
              指示します。


       -F name

       --filter name
              ELF   の 共 有 オ ブ ジェクトを生成する際に、内部の
              DT_FILTER フィールドを指定した name にセッ ト し ま
              す。 これは、共有オブジェクトのシンボルテーブルを、
              共有オブジェクト name のシンボルテーブルに適用す る
              フィ ルタとして使う事を、実行時リンカに対して指示し
              ます。


       -format input-format
              -b input-format と同意です。


       -g     受け付けますが、無視されます; 他のツールとの互換 性
              のために提供されています。


       -G size
              MIPS ECOFF において GP レジスタを使って最適化される
              オブジェクトの最大サイズを size にします。他のオ ブ

       --help  コマンドラインオプションのサマリを標準出力に表示し
              て終了します。このオプションと、1 つではなく 2 つの
              ダッシュで始まる --version は他の GNUプログラムとの
              互換性のためのものです。 1 つだけのダッシュで始まる
              他 のオプションは他のリンカとの互換性のためのもので
              す。


       -i     インクリメンタルリンクを行います (-r オプションと同
              じです)。


       -lar    アーカイブファイル ar をリンクするファイルのリスト
              に加えます。このオプションは何度でも 指 定 で き ま
              す。ld  は、指定された各 ar について libar.a を自己
              のパスリストから探します。


       -Lsearchdir
              このコマンドはパス searchdir を、 ld がアーカイブラ
              イ ブ ラ リを探すパスのリストに追加します。このオプ
              ションは何度でも指定して構いません。

              デフォルトで (-L で指定されずに) 探すパスの組は  ld
              が どのエミュレーションモードを使っているか、そして
              場合によってはどうコンフィギュレーションされてい る
              か、 に 依 存します。パスはリンクスクリプトの中でも
              SEARCH_DIR コマンドを使って指定できます。


       -M     リンクマップ -- ld によってシンボルがどこに配置され
              た かの診断情報、そしてグローバルなコモン領域の配置
              情報 -- を (標準出力ファイルへ) 出力します。


       -Map mapfile
              ファイル mapfile にリンクマップ -- ld  によってシン
              ボ ルがどこに配置されたかの診断情報、そしてグローバ
              ルなコモン領域の配置情報 -- を出力します。


       -m emulation
              emulation で指定されたリンカをエミュレートしま す。
              emulation として指定できる物は --verbose-V オプ
              ションでリストできます。このオプションは、 ld を コ
              ン パイルする際にコンフィギュレーションでデフォルト
              として指定して埋め込まれている目的システムに優先 し
              ます。


       -N     textdata セクションを読み書き可能にする指定で
              致 命的ではないエラーの後であっても出力ファイルを残
              しておく事を望んでいる事を指示できます。


       -no-keep-memory
              通常、リンカは速度面での最適化を、入力ファイルの シ
              ン ボルテーブルをメモリ中にキャッシュすることでのメ
              モリ使用量の増大よりも優先します。このオ プ ショ ン
              で、 そうではなく必要に応じてシンボルを再読み込みす
              る事でメモリ使用量を最適化する事を指示できます。 大
              き な実行ファイルをリンクしている際にメモリ領域を使
              いきってしまうような場合に、このオプションが必要 に
              なるかもしれません。


       -no-warn-mismatch
              通 常、何らかの理由でマッチしない入力ファイル同士を
              リンクしようとすると、リンカはエラーを起こしま す。
              お そらくは、異なるプロセッサ用か異なるエンディアン
              向けにコンパイルされたことが原因でしょう。このオ プ
              ショ ンは、そのような起こり得るエラーを黙って許容す
              るよう、リンカに対して指示します。このオ プ ショ ン
              は、 リンカがエラーとする事が不適切と確証を持てる特
              別な処理を行う場合にのみ注意深く使うべきです。


       -o output
              outputld の生成するプログラム名です; この オ プ
              ショ ン が 指定されていない場合は、デフォルトの名前
              `a.out' が使われます。スクリプトのコマン ド  OUTPUT
              でも出力ファイル名を指定できます。


       -Olevel
              最 適化した出力ファイルを生成します。非常に長い時間
              がかかるかもしれませんので、最終的なバイナリを生 成
              するときのみ有効にすべきかもしれません。 level は数
              値であるものとして扱われます。 0 より大きな値は最適
              化を有効にします。


       --oformat output-format
              出 力 オ ブジェクトファイルのバイナリ形式を指定しま
              す。ld はデフォルトの出力形式としてそれぞれのマシン
              で 最も一般的な形式を生成するようにコンフィギュレー
              ションされているので、通常はこれを指定する必要は あ
              り ません。output-format は文字列テキストで、BFD ラ
              イブラリでサポートされる形式名で指定します。スク リ
              プトでのコマンド OUTPUT_FORMAT でも出力形式を指定で
              きますが、このオプションはそれより優先されます。


              る広域最適化を行う事が可能になります。

              これがサポートされないプラットフォームでは、  `-re-
              lax' は受け付けますが影響はありません。


       -r      再配置可能な出力を生成します -- つまり、再度 ld に
              入力として与えられる出力ファイルを生成します。こ れ
              は し ばしば 部分的なリンクと呼ばれます。副作用とし
              て、標準的な Unix のマジックナンバをサポートする 環
              境 では、このオプションは同時に出力ファイルのマジッ
              クナンバを OMAGIC にします。このオプションが指定 さ
              れないと、絶対ファイルが生成されます。 C++ のプログ
              ラムをリンクしている時は、このオプションではコン ス
              ト ラクタへの参照は解決 されません; 代わりに -Ur を
              使ってください。

              このオプションは -i と同じ事をします。


       -rpath directory
              実行時のライブラリ検索パスにディレクトリを追加し ま
              す。これは ELF 実行形式を共有オブジェクトとリンクす
              る時に使われます。すべての -rpath 引数がつ な が れ
              て、 実行時リンカに渡されます。実行時リンカはそれら
              を使って共有オブジェクトの位置を実行時に突き止め ま
              す。  -rpath オプションは、リンク時に明示的に含めら
              れた共有オブジェクトが必要とする共有オブジェクト の
              位 置を突き止めるためにも使われます; -rpath-link オ
              プションの説明を参照してください。もし ELF 実行形式
              を リンクする時に -rpath が使われないと、定義されて
              いれば環境変数 LD_RUN_PATH の内容が使われます。

              -rpath リンカは与えられたすべての -L オプションを含
              む 実行時の検索パスを生成します。もし -rpath が指定
              されれば、実行時の検索パスは -rpath オプションを 使
              い、  -L オプションは無視して排他的に形成されます。
              このことは gcc を使う時に有効でしょう。 gcc は多 く
              の  -L オプションを付け、それらは NFSマウントされた
              ファイルシステムにあるかもしれないからです。


       -rpath-link directory
              ELF か SunOS で使う時に、1 つの共有ライブラリが他の
              共 有 ラ イブラリを必要とするかも知れません。これは
              ld -shared によるリンクで入力ファイルの 1 つとし て
              共有ライブラリが含まれる場合に発生します。

              リ ンカがそのような依存関係に出会った時、非共有、再
              配置不可能のリンクをしている時は、もし必要な共有 ラ
              イ ブラリが明示的には含まれていないのなら、自動的に
              その位置を突き止めてリンク作業に含めようとしま す。

       -s     すべてのシンボル情報を出力ファイルに出しません。


       -shared
              共有ライブラリを作成します。これは現時点では ELF と
              SunOS のプラットフォームでのみサポー ト さ れ ま す
              (SunOS では指定しなくても構いません。リンカは未定義
              シンボルがあって -e オプションが指定されていなけ れ
              ば自動的に共有ライブラリを作成します)。


       -sort-common
              通 常、 ld がグローバルのコモンシンボルを適切な出力
              セクションに置く時、それらをサイズ順に並べます。 最
              初 に すべての 1 バイトのシンボルが来て、すべての 2
              バイト、それからすべての 4 バイト、そしてそれら以外
              の 順になります。これはアラインメントの制約によるシ
              ンボル間のすき間を避けるために行われます。このオ プ
              ションでは、その並べ替えを抑止します。


       -split-by-reloc count
              count 個より多くの再配置を含む出力セクションが 1 つ
              もできないように、出力ファイルに追加のセクション を
              作 る事を試みます。これは、ある種のリアルタイムカー
              ネルに、COFF オブジェクト形式でダウンロードするため
              の 巨 大な再配置可能ファイルを生成する時に有用です;
              COFF では 1 つのセクションで 65535 個より多い再配置
              情 報を持てないからです。これは任意のセクションをサ
              ポートしないオブジェクトファイル形式ではうまく動 作
              し ない事に注意してください。リンカは個々の入力のセ
              クションを再分配のために切り分ける事はありませ ん。
              こ のため、もし 1 つの入力セクションが count より多
              い再配置を含んでいると、1 つの出力セクションがそ の
              数の再配置を含む事になります。


       -split-by-file
              -split-by-reloc  と同様ですが、入力ファイル毎に新し
              い出力セクションを生成します。


       --section-start sectionname=org
              出力ファイル中のセクションの絶対アドレスを org で指
              定します。 org は 16 進整数であることが必要です。複
              数セクションの位置を指定するために、複数回コマン ド
              ラ インで指定可能です。手の込んだ式を使う必要がある
              場合、スクリプトから隣家コマンド言語を使用するこ と
              を検討してください。


       -Tbss org
       -t     ld が処理している入力ファイル名を出力します。


       -u sym 強制的に sym が未定義シンボルとして出力ファイルに入
              る ようにします。これは、例えば、標準ライブラリから
              追加のモジュールをリンクする引金となり得ます。さ ら
              に 未 定 義シンボルを追加するために -u を異なるオプ
              ション引数で繰り返し可能です。


       -Ur    C++ プログラム以外の物については、このオプション は
              -r  と等価です: 再配置可能な出力 -- つまり、再度 ld
              に入力として与えられる出力ファイル -- を生 成 し ま
              す。  C++   プログラムをリンクする時は、-r と異なり
              -Ur  はコンストラクタの参照を解決 します。


       --verbose
              ld のバージョン番号とサポートするエミュレーションの
              リストを表示します。どの入力ファイルが開けた/開けな
              かったかを表示します。


       -v, -V ld のバージョン番号を表示します。 -V オプションでは
              サポートするエミュレーションのリストも表示します。


       --version
              ld のバージョン番号を表示して終了します。


       -warn-common
              コ モンシンボルが他のコモンシンボルかシンボル定義と
              結合された時に警告します。Unix のリンカはこのややず
              さ んな慣習を許しますが、他のいくつかのオペレーティ
              ングシステムのリンカは許しません。このオプション で
              グ ローバルシンボルの結合による問題の可能性を見つけ
              ることができます。


       -warn-constructors
              グローバルコンストラクタの使用を警告します。これ は
              2、3 のオブジェクトファイル形式でのみ有用です。COFF
              や ELF といった形式については、リンカはグローバルコ
              ンストラクタの使用を検出できません。


       -warn-multiple-gp
              出 力ファイルが複数のグローバルポインタ値を必要とす
              る場合に警告します。このオプションはある種 の プ ロ
              セッサ、Alpha などでのみ意味を持ちます。


       --whole-archive
              コマンドライン上で --whole-archive オプションの後に
              指定された各アーカイブについて、必要なオブジェク ト
              ファ イルをアーカイブから探す代わりに、アーカイブ中
              の全オブジェクトファイルをリンクします。こ れ は 通
              常、 アーカイブファイルを共有ライブラリにするのに使
              い、作成する共有ライブラリに全オブジェクトが確実 に
              入るようにします。


       --no-whole-archive
              こ れ以降にコマンドライン上で指定されたアーカイブに
              ついて --whole-archive オプションの効果を無効にしま
              す。


       --wrap symbol
              symbol   に つ いてラッパー関数を使います。未解決の
              symbol への参照を __wrap_symbol で解決します。未 解
              決の __real_symbol への参照を symbol で解決します。


       -X     テンポラリのローカルシンボルをすべて削除します。 大
              部分のターゲットでは、これは名前が `L' で始まるすべ
              てのローカルシンボルになります。


       -x     すべてのローカルシンボルを削除します。





環境変数

       環境変数 GNUTARGETld の動作を変えることが出来ます。

       -b (またはその同義語の -format) を使わない場合に GNUTARGET
       で入力ファイルオブジェクト形式が決まります。その値は入力形
       式を示す BFD 名でなければなりません。環境変数に  GNUTARGET
       が無ければ、ld はホストの自然な形式を使います。もしGNUTAR-
       GETdefault にセットされていればBFD はバイナリ入力 ファ
       イルを調べることで入力形式を見つけようとします; このやりか
       たは多くの場合に成功しますが、あいまいになる可能性がありま
       す。オブジェクトファイル形式の印として使われているマジック
       ナンバが重複していない事を確認する方法が存在しないか ら で
       す。 し か しながら、各システムでの BFD のコンフィギュレー
       ション処理で、そのシステムで慣習的に使われる形式を検索リス
       トの最初に置きます。よってあいまいさは慣習に合わせる事で解
       決されます。



       http://www.gnu.org/copyleft/.












































































































































































































































































































日本語訳

       野首 寛高(hnokubi@yyy.or.jp): FreeBSD 用に翻訳




cygnus support            17 August 1992                    ld(1)

ABELNET VPSサービス