コマンドラインでの ILINK32 と ILINK64 の利用

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

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


ILINK32 と ILINK64 の技術詳細については、「ILINK32 と ILINK64 の技術詳細」ページを参照してください。

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

コマンドライン構文

ILINK32 の場合:

ILINK32 [@<respfile>][<options>] <startup> <myobjs>, [<exefile>],
        [<mapfile>], [<libraries>], [<deffile>], [<resfiles>]

ILINK64 の場合:

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


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

ILINK32.EXE および ILINK64.EXE のコマンドライン オプションでは、大文字と小文字が区別されます。 ILINK32.EXE および ILINK64.EXE では、以下の表に示すコマンドライン オプションをサポートしています。

メモ: ILINK32.EXE および ILINK64.EXE では、ハイフン(-)またはスラッシュ(/)でオプションとして処理されます (たとえば、/Tpe オプションは、-Tpe とも記述できます)。


リンカ オプション

オプション 説明
@<respfile> 応答ファイル <respfile> を使用します。
/A:dd ILINK32 の場合、ファイルのアライメントを指定します(後方互換性のためのスイッチの場合、/Af を使用)。
/Af:nnnn ファイルのアライメントを指定します。nnnn には 16 進数または 10 進数で設定します。 nnnn は、2 の累乗でなければなりません。

デフォルトは 0x200 = 512 バイト境界です。

/Ao:nnnn オブジェクトのアライメントを指定します。nnnn には 16 進数または 10 進数で設定します。 nnnn は、2 の累乗でなければなりません。

デフォルトは 0x1000 = 4096 バイト境界です。

/aa 64 ビット Windows アプリケーションをビルドします。
/ad 32/64 ビット Windows デバイス ドライバをビルドします。
/ap 32/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 オブジェクト検索パスを指定します。

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

OR

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

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

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


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

OR

 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 32/64 ビット Windows DLL ファイルをターゲットにします。
/Tpe 32/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(スレッド ローカル ストレージ)の各セクション
  • リンク時に発生したあらゆる警告メッセージやエラー メッセージ


リンカ応答ファイル

コマンドライン リンカで応答ファイルを使用して、リンカ オプションを指定することができます。

応答ファイルとは、通常はコマンドラインから入力するリンカ オプションやファイル名を列挙するための tex ファイルです。 応答ファイルを使うと、ほとんどのオペレーティング システムでサポートしている以上の長いコマンドラインを使うことができ、さらに、同じ情報を頻繁に入力する必要がなくなります。 応答ファイルには、構成ファイルと同じ情報を記述できるだけでなく、ファイル名の記述までサポートされています。

コマンドラインと異なり、応答ファイルは複数行で記述することができます。 続きの行があることを指定するには、行末にプラス文字(+)を記入し、コマンドの続きを次の行に記述します。 プラスを指定してオンにするオプション(/v+ など)が行末に来た場合には、その + は行の継続を示す文字として扱われません(次の行に継続する場合には /v+ + を指定してください)。

応答ファイル中で、コマンドラインの構成要素をそれぞれ別の行に分けて指定したい場合には(.OBJ ファイルと .LIB ファイルを分けるなど)、コマンドライン中でそれらを区切るためのコンマを省いてください。

例:

/c c0ws+
myprog,myexe +
mymap +
mylib cws

コンマが省かれています。このコンマは、コマンドラインで情報を入力するときには必要です。

ILINK32 /c c0ws myprog,myexe,mymap,mylib cws

OR

ILINK64 /c c0ws myprog,myexe,mymap,mylib cws

応答ファイルを使用するには:

  1. コマンドライン オプションとファイル名をテキスト ファイルに入力し、ファイルを保存します。 応答ファイルの拡張子は、通常は .RSP です。
  2. 次のように入力します:
ILINK32 @[<path>]<RESFILE.RSP>


OR
ILINK64 @[<path>]<RESFILE.RSP>


ここでは、<RESFILE.RSP> は応答ファイルの名前です。

次のようにすると、複数の応答ファイルを指定することができます。

ilink32 /c @listobjs.rsp,myexe,mymap,@listlibs.rsp

OR

ilink64 /c @listobjs.rsp,myexe,mymap,@listlibs.rsp
メモ: セミコロンを使うと、応答ファイルにコメントを追加することができます。リンカは、1 つの行の中でセミコロン以降にあるテキストをすべて無視します。


コマンドライン要素

リンカはまた、通常コマンドラインで入力するオプション群を、ILINK32.CFG または ILINK64.CFG という構成ファイルを使用して設定することもできます。

要素 説明 プラットフォーム
ILINK32 ILINK64
[@<respfile>] 応答ファイルとは、通常はコマンドラインから入力するリンカ オプションやファイル名を記述するためのテキスト ファイルです。 オプションやファイル名を応答ファイルに記述すると、アプリケーションをリンクする際のキー入力の数を減らすことができます。
Checkmark.svg
<options> リンクをどのように行うかを制御するためのリンカ オプションです。 たとえば、.EXE、.BPL、.DLL のいずれのファイルを生成するかは、オプションで指定します。 リンカ オプションの前には、スラッシュ(/)またはハイフン(-)を付ける必要があります。
Checkmark.svg
Checkmark.svg
<startup> プログラムのさまざまなセグメントの順序を設定する、実行可能ファイルおよび DLL のための初期化モジュールです。 正しい初期化モジュールのリンクに失敗すると、通常、ある識別子が未解決である、あるいはスタックが作成されていないといったエラー メッセージが、大量に出力されます。
Checkmark.svg
Checkmark.svg
<myobjs> リンクする .OBJ ファイルです。 ファイルが現在のディレクトリにない場合は、パスを指定します (拡張子がない場合は、リンカにより拡張子 .OBJ が付加されます)。 このセクションには、Delphi パッケージ(.bpi)のためのインポート ライブラリも指定することができます。
Checkmark.svg
<objfiles> リンクするオブジェクト ファイル(.o ファイル)です。 ファイルが現在のディレクトリにない場合は、パスを指定します (拡張子がない場合は、リンカが拡張子 .O を付加します)。
Checkmark.svg
<exefile> 実行可能ファイル(.EXE、.BPL、または .DLL)に付ける名前です。 実行可能ファイル名を指定しない場合、ILINK32 は、列挙されている最初のオブジェクト ファイル名に .EXE、.BPL、または .DLL を付けて、実行可能ファイルの名前を作成します (実行可能ファイルの拡張子が指定されていない場合、リンカは、拡張子を .EXE とみなして、.EXE を付加します。 また、ダイナミック リンク ライブラリの拡張子が指定されていない場合は、拡張子 .DLL を付加します。 同様に、パッケージ ファイルの拡張子が指定されていない場合は、拡張子 .BPL を付加します)。
Checkmark.svg
Checkmark.svg
<mapfile> マップ ファイルに指定したい名前です。 名前を指定しない場合、マップ ファイルには .EXE ファイルと同じ名前が付けられます(ただし、拡張子は .MAP)。 拡張子を指定しないと、リンカが拡張子 .MAP を付加します。
Checkmark.svg
Checkmark.svg
<libraries> リンク時に組み込むライブラリ ファイルです。 ライブラリを列挙する際は、コンマで区切らないでください。 ファイルが現在のディレクトリまたは検索パス(/L オプションを参照)にない場合は、リンク文にパスを入れる必要があります 拡張子がない場合は、リンカが拡張子 .LIB を付加します。 ライブラリを列挙する順序は非常に重要です。必ず以下の順序にしてください。
  1. CodeGuard ライブラリ(必要な場合)
  2. 自分で作成したユーザー ライブラリ(同じ関数が複数回定義されている場合、リンカは最初に見つかった定義を使用します)
  3. IMPORT32.LIB または IMPORT64.LIB(Windows API を使用する実行可能ファイルを作成する場合)
  4. 数値計算ライブラリ
  5. ランタイム ライブラリ
Checkmark.svg
<libfiles> リンク時に組み込むライブラリ ファイル(.a ファイル)です。 ライブラリを列挙する際は、コンマで区切らないでください。 ファイルが現在のディレクトリまたは検索パス(/L オプションを参照)にない場合は、リンク文にパスを入れる必要があります 拡張子がない場合は、リンカが拡張子 .LIB を付加します。 ライブラリを列挙する順序は非常に重要です。必ず以下の順序にしてください。
  1. 自分で作成したユーザー ライブラリ(同じ関数が複数回定義されている場合、リンカは最初に見つかった定義を使用します)
  2. import64.a (Windows API を使用する実行可能ファイルを作成する場合)
  3. 数値計算ライブラリ
  4. ランタイム ライブラリ
Checkmark.svg
<deffile> Windows 実行可能ファイルのモジュール定義ファイルです。 モジュール定義(.DEF)ファイルを指定せずに、/Twd オプションまたは /Twe オプションを使用している場合、リンカは、デフォルトの設定に基づいてアプリケーションを作成します 拡張子がない場合は、リンカが拡張子 .DEF を付加します。
Checkmark.svg
Checkmark.svg
<resfiles> 実行可能ファイルにバインドする .RES ファイル(コンパイル済みリソース ファイル)のリストです。 (拡張子がない場合は、リンカが拡張子 .RES を付加します)。
Checkmark.svg
Checkmark.svg


コマンドライン ヘルプ

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

ilink32

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

ilink64

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

Turbo Incremental Link 6.40 Copyright (c) 1997-2017 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

ILINK32

BCC32.EXE での ILINK32 の使用

コマンド ラインで .OBJ や .LIB の拡張子を明示してファイル名を入力することで、コマンドライン コンパイラ(BCC32.EXE)を介して ILINK32 にオプションやファイルを渡すことができます。 たとえば、このコマンドは:

BCC32 mainfile.obj sub1.obj mylib.lib

MAINFILE.OBJ、SUB1.OBJ、MYLIB.LIB をリンクし、実行可能ファイル MAINFILE.EXE を生成します。

BCC32.EXE のリンカにオプションを渡すには、-l を使用できます。 たとえば、-ls-s をリンカに渡します。 また、BCC32C.EXE とも動作します。

メモ: デフォルトでは、BCC32 は、C0W32.OBJ、CW32.LIB、IMPORT32.LIB の各ファイル(それぞれ初期化モジュール、ランタイム ライブラリ、Windows インポート ライブラリ)と一緒に ILINK32 を起動します。 さらに、Delphi コンパイラも C++ コンパイラも常に /c(大文字と小文字を区別するリンク)オプションをリンカに渡します。

トピック

関連項目