ILINK64.EXE - 64 ビット インクリメンタル リンカ

提供: RAD Studio
移動先: 案内検索

コマンドライン ユーティリティ:インデックス への移動


ILINK64.EXE は、ILINK64(64 ビット Windows 用 C++ リンカ)のコマンドライン インターフェイスです。

コマンドライン構文

ILINK64 <objfiles>, <exefile>, <mapfile>, <libfiles>, <deffile>, <resfiles>

コマンドライン要素

また、64 ビット リンカは ILINK64.CFG という構成ファイルを作成し、通常はコマンド ラインから入力するオプションを設定しておくこともできます。

要素 説明

<options>

リンクをどのように行うかを制御するためのリンカ オプションです。たとえば、.EXE または .DLL のいずれのファイルを生成するかは、オプションで指定します。リンカ オプションの前には、スラッシュ(/)またはハイフン(-)を付ける必要があります。

<startup>

プログラムのさまざまなセグメントの順序を設定する、実行可能ファイルおよび DLL のための初期化モジュールです。正しい初期化モジュールのリンクに失敗すると、通常、ある識別子が未解決である、あるいはスタックが作成されていないといったエラー メッセージが、大量に出力されます。

<objfiles>

リンクするオブジェクト ファイル(.o ファイル)です。ファイルが現在のディレクトリにない場合は、パスを指定します (拡張子がない場合は、リンカが拡張子 .O を付加します)。

<exefile>

実行可能ファイル(.EXE または .DLL)に付ける名前です。実行可能ファイル名を指定しない場合、ILINK64 は、列挙されている最初のオブジェクト ファイル名に .EXE または .DLL を付けて、実行可能ファイルの名前を作成します (実行可能ファイルの拡張子が指定されていない場合、リンカは、拡張子を .EXE とみなして、.EXE を付加します。また、ダイナミック リンク ライブラリの拡張子が指定されていない場合は、拡張子 .DLL を付加します)。

<mapfile>

マップ ファイルに付ける名前です。名前を指定しない場合、マップ ファイルには .EXE ファイルと同じ名前が付けられます(ただし、拡張子は .MAP)。拡張子を指定しないと、リンカが拡張子 .MAP を付加します。

<libfiles>

リンク時に組み込むライブラリ ファイル(.a ファイル)です。ライブラリを列挙する際は、コンマで区切らないでください。ファイルが現在のディレクトリまたは検索パス(/L オプションを参照)にない場合は、リンク文にパスを入れる必要があります (拡張子がない場合は、リンカが拡張子 .LIB を付加します)。ライブラリを列挙する順序は非常に重要です。必ず以下の順序にしてください。

  1. 自分で作成したユーザー ライブラリ(同じ関数が複数回定義されている場合、リンカは最初に見つかった定義を使用します)
  2. import64.a(Windows API を使用する実行可能ファイルを作成する場合)
  3. 数値計算ライブラリ
  4. ランタイム ライブラリ

<deffile>

Windows 実行可能ファイルのモジュール定義ファイルです。モジュール定義(.DEF)ファイルを指定せずに、/Twd オプションまたは /Twe オプションを使用している場合、リンカは、デフォルトの設定に基づいてアプリケーションを作成します (拡張子がない場合は、リンカが拡張子 .DEF を付加します)。

<resfiles>

実行可能ファイルにバインドする .RES ファイル(コンパイル済みリソース ファイル)のリストです (拡張子がない場合は、リンカが拡張子 .RES を付加します)。

コマンドライン ヘルプ

ILINK64 のコマンドライン ヘルプを表示するには、次のように入力します。

ilink64

次の画面が表示されます。

Turbo Incremental Link 6.40 Copyright (c) 1997-2012 Embarcadero Technologies, Inc.
Syntax: ILINK objfiles, exefile, mapfile, libfiles, deffile, resfiles
@xxxx indicates use response file xxxx
General Options:                       -Af:nnnn Specify file alignment
 -C       Clear state before linking   -Ao:nnnn Specify object alignment
 -wxxx    Warning control              -ax      Specify application type
 -Enn     Max number of errors         -b:xxxx  Specify image base addr
 -r       Verbose linking              -Txx     Specify output file type
 -q       Suppress banner              -H:xxxx  Specify heap reserve size
 -c       Case sensitive linking       -Hc:xxxx Specify heap commit size
 -v       Full debug information       -S:xxxx  Specify stack reserve size
 -Gn      No state files               -Sc:xxxx Specify stack commit size
 -Gi      Generate import library      -Vd.d    Specify Windows version
 -GD      Generate .DRC file           -Dstring Set image description
Map File Control:                      -Vd.d    Specify subsystem version
 -M       Map with mangled names       -Ud.d    Specify image user version
 -m       Map file with publics        -GC      Specify image comment str
 -s       Detailed segment map         -GF      Set image flags
 -x       No map                       -Gl      Static package
Paths:                                 -Gpd     Design time only package
 -I       Intermediate output dir      -Gpr     Runtime only package
 -L       Specify library search paths -GS      Set section flags
 -j       Specify object search paths  -Gt      Fast TLS
Image Control:                         -Gz      Do image checksum
 -d       Delay load a .DLL            -Rr      Replace resources

コマンドライン オプション

ILINK64.EXE コマンドライン オプションでは、大文字と小文字が区別されます。

ILINK64.EXE では、以下の表に示すコマンドライン オプションをサポートしています。

メモ: ilink64 のコマンドライン オプションは、先頭の / の代わりに - を使って記述することもできます (たとえば、/Tpe オプションは -Tpe と記述することもできます)。

リンカ オプション

オプション 説明

@<respfile>

<respfile> という応答ファイルを使用します。

/Af:nnnn

ファイルのアラインメントを指定します。nnnn は 16 進数または 10 進数で指定します。nnnn は 2 の累乗でなければなりません。
デフォルトは 0x200 = 512 バイト境界です。

/Ao:nnnn

オブジェクトのアラインメントを指定します。nnnn は 16 進数または 10 進数で指定します。nnnn は 2 の累乗でなければなりません。
デフォルトは 0x1000 = 4096 バイト境界です。

/aa

64 ビット Windows アプリケーションをビルドします。

/ad

64 ビット Windows デバイス ドライバをビルドします。

/ap

64 ビット Windows コンソール アプリケーションをビルドします。

/B:xxxx

イメージのベース アドレスを指定します(再配置テーブルは削除します)。

/b:xxxx

イメージのベース アドレスを指定します(DLL 再配置テーブルは保持します)。後続のオブジェクトは、64KB の連続したアドレス境界に配置されます。読み込み時や実行時のパフォーマンスが向上します。 DLL 生成時には指定することをお勧めします。
デフォルトはオフです。

/C

リンカのステート ファイルを更新します。リンクの前に、毎回、リンカ ステート ファイルをすべて消去します。その後、そのファイルを再作成し、リンク処理を続行します。

/c

パブリック シンボルおよび外部シンボルで大文字と小文字の区別を重視します。
デフォルトはオンです。

/d

DLL を遅延読み込みします。指定した DLL は、DLL 内のエントリ ポイントが実際に呼び出されないと、読み込みおよび初期化されません。

/D:xxxx

指定された説明が PE イメージに保存されます。

/Enn

エラーの最大数を指定します。

/GC

イメージの PE ファイル ヘッダーにあるオブジェクト テーブルの直後に、コメント文字列を挿入します。複数の文字列を指定できます。
デフォルトはオフです。

/GD

Delphi 互換の RC ファイル(DRC ファイル)を生成します。
デフォルトはオフです。

/GF:xxxx

イメージ フラグを設定します。xxxx に指定するフラグは以下のとおりです。

  • -GF SWAPNET を指定すると、イメージがネットワーク ドライブ上にある場合に、イメージをローカル スワップ ファイルにコピーし、そこから実行します。
  • -GF SWAPCD を指定すると、イメージがリムーバブル メディア(CD、ZIP ドライブなど)上にある場合に、イメージをローカル スワップ ファイルにコピーし、そこから実行します。
  • -GF UNIPROCESSOR を指定すると、アプリケーションをマルチプロセッサ システム上で実行できなくなります。
  • -GF LARGEADDRESSAWARE は、4GB を超えるアドレスをアプリケーションが認識することを OS に伝えます。
  • -GF AGGRESSIVE を指定すると、アプリケーションがアイドル状態のときに、アプリケーションの作業セットを積極的に除外します(メインのプロセスの邪魔をしたくない、スクリーン セーバーなどのプロセスに適しています)。

/Gk

エラー時に出力ファイルを保持します。
デフォルトはオフです。

/Gl

.LIB ファイルを生成します。

/Gpd

設計時専用パッケージを生成します。デフォルトでは、パッケージは設計時と実行時の両方で動作します。

/Gpr

実行時専用パッケージを生成します。デフォルトでは、パッケージは設計時と実行時の両方で動作します。

/Gn

ステート ファイルを生成しません(インクリメンタル リンクを無効にします)。次回以降のリンクは、最初のリンクと同程度の時間がかかります。デフォルトはオフです。

/Gs:string=[EICRWSDKP]

セクション フラグを設定します。指定したセクションの既存のフラグに対して、指定したフラグを追加します。セクションからデフォルトのフラグを削除することはできません。セクション フラグには以下のものがあります。
E = 実行可能ファイル
C = コードを含む
I = 初期化済みデータを含む
R = セクションは読み取り可能である
W = セクションは書き込み可能である
S = セクションを共有する
D = セクションは破棄可能である
K = セクションをキャッシュしてはならない
P = セクションをページングしてはならない


 -Gs:.rsrc=W

このスイッチを指定すると、RSRC セクションが書き込み可能になります。

/Gz

ターゲットのチェックサムを計算し、その結果を PE ヘッダーに挿入します。これは、NT のカーネル モード ドライバとシステム DLL で使用されます。
デフォルトはオフです。

/H:xxxx

アプリケーションのヒープ予約サイズを 16 進数または 10 進数で指定します。最小値は 0 です。このスイッチは、モジュール定義ファイルで設定された HEAPSIZE よりも優先されます。
デフォルトは 1 MB(0x1000000)です。

/HC:nnnn

アプリケーションのヒープ コミット サイズを指定します。

/I

中間出力ファイルのディレクトリを指定します。リンカ ステート ファイルはこの指定に従いますが、マップ デバッグ ファイルデバッグ シンボル ファイルは出力イメージと同じディレクトリに保存されます(ただし、マップ デバッグ ファイルに関しては他で指定されていない場合のみ)。

/j

オブジェクト検索パスを指定します。

 ILINK64 /jc:\myobjs;.\objs splash ^
      .\common\logo,,,utils logolib

このコマンドは、最初に現在のディレクトリで SPLASH.OBJ を検索するようにリンカに指示します。ファイルが現在のディレクトリに見つからない場合、リンカは、そのファイルを C:\MYOBJS ディレクトリで検索し、次に .\OBJs ディレクトリで検索します。ただし、LOGO.OBJ ファイルのパスは明示的に指定されているため、リンカは、このファイルを検索する際にはオブジェクト検索パスを使用しません。

/L

LIB ファイルのパスが明示的に指定されず、かつリンカが現在のディレクトリで LIB ファイルを見つけられない場合に使用する、ライブラリ検索パスを指定します。

 ILINK64 /Lc:\mylibs;.\libs splash ^
     .\common\logo,,,utils logolib

最初に現在のディレクトリで SPLASH.LIB を検索するようにリンカに指示します。ファイルが現在のディレクトリに見つからない場合、リンカは、C:\MYLIBS ディレクトリで検索し、次に .\LIBs ディレクトリで検索します。ただし、LOGO.LIB ファイルのパスは明示的に指定されているため、リンカは、このファイルを検索する際にはライブラリ検索パスを使用しません。

/M

マップ ファイル内に完全名ではなく変形した C++ 識別子を出力します。

/m

セグメントのリストでは、各セグメントについて 1 行を使い、セグメントの開始アドレス、セグメント長、セグメント名、およびセグメント クラスを示します。パブリック シンボルは 2 つのリストに分けられ、そのうちの 1 つはアルファベット順で、もう 1 つはアドレスの昇順でシンボルを表示します。絶対アドレスを持つシンボルには、タグ Abs が付いています。パブリック シンボルのリストは、デバッグのときに便利です。 デバッガの多くがパブリック シンボルを使用しているので、デバッグ時にシンボル アドレスを参照できるためです。

/q

コマンドライン バナーを表示しません。

/r

リンク時に詳細を表示します。デフォルトはオフです。

/Rr

リソースを置換します。

/S:xxxx

アプリケーションのスタック予約サイズを指定します。

/Sc:xxxx

アプリケーションのスタック コミット サイズを指定します。

/s

リンカで生成されるデフォルト マップ ファイルにグループやモジュールの情報などの詳細を追加することで、セグメントの詳細マップ ファイルを生成します。

/Tpd

64 ビット Windows DLL ファイルをターゲットにします。

/Tpe

64 ビット Windows EXE ファイルをターゲットにします。

/Tpp

パッケージを生成します。

/t

リンクに要した時間を表示します。

/v

デバッグ シンボル ファイルを生成します。

/w

すべての警告をオンにします。

/w-dee

以下の警告を無効にします。
"ビルドされた .EXE モジュールに .DLL または .BPL 拡張子が付いています"

/w-dpl

以下の警告を無効にします。
"ライブラリ内のシンボルが重複しています"

/w-dup

以下の警告を無効にします。
"シンボルが重複しています"

/w-exp

以下の警告を有効にします。
"非パブリック シンボルをエクスポートしようとしています"

/w-nou

以下の警告を無効にします。
"ユニットのないパッケージを作成中"

/w-rty

以下の警告を有効にします。
"インクリメンタル リンクを実行できません - 完全リンクを実行中..."

/w-srd

以下の警告を無効にします。
"DLL から再配置情報を削除すると正常に機能しなくなる可能性があります"

/w-snf

以下の警告を無効にします。
"セクションが見つかりません"

/w-uld

以下の警告を無効にします。
"DLL を読み込めません"

/x

マップ デバッグ ファイルを作成しません。

(blank)

セグメントのデフォルト マップ ファイル(リンカ スイッチなし)。

デフォルトでは、リンカは、以下を始めとする一般的なセグメント情報が記載されたマップ ファイルを生成します。

  • セグメントのリスト(セグメント名を含みます)
  • プログラムの開始アドレスとオフセット
  • CODE、DATA、BSS(初期化されていない)、TLS(スレッド ローカル ストレージ)の各セクション
  • リンク時に発生したあらゆる警告メッセージやエラー メッセージ

ILINK64 のメモリ不足エラーの処理

IDE では "致命的: メモリ不足です" というメッセージを表示するだけですが、ILINK64 からは各ヒープやメモリの使用量についてのさらに詳しい情報が出力されます。

以下に例を示します。

Turbo Incremental Link64 6.40 Copyright (c) 1997-2012 Embarcadero Technologies,
Inc.
Overrun on linker heap: info
Linker Heaps
------------
info                   0x12271000  0x12000000
code                   0x0487d000  0x08000000
rodata                 0x00159000  0x06000000
data                   0x029bb000  0x08000000
bss                    0x08000000  0x08000000
dwarf_aranges          0x00010000  0x00200000
dwarf_macinfo          0x00010000  0x00200000
dwarf_pubtypes         0x00275000  0x02000000
dwarf_info             0x04e57000  0x06000000
dwarf_abbrev           0x00040000  0x00200000
dwarf_line             0x0124d000  0x02000000
dwarf_str              0x036e0000  0x06000000
dwarf_loc              0x00070000  0x02000000
dwarf_ranges           0x00275000  0x02000000
Fatal: Out of memory

-GH<heapname>=size を使用すると、より大きなヒープや複数のヒープ領域を確保することができます。

たとえば、社内の C++Builder 開発者は、DLL OWLNext ライブラリのリリース版をリンクするために -GHinfo=0x12000000 と指定しています。

トピック

関連項目