ILINK32 と ILINK64 の技術詳細
C++ リンカ への移動
コマンドラインでの ILINK32 および ILINK64 の利用については、「コマンドラインでの ILINK32 と ILINK64 の利用」ページを参照してください。
ILINK32
ILINK32 は、オブジェクト モジュール(.OBJ ファイル)、ライブラリ モジュール(.LIB ファイル)、およびリソースをリンク付けして、実行可能 ファイル(.EXE、.DLL、.BPL ファイル)を生成します。ILINK32 は、この情報を含む、一連のリンカ ステート ファイル」を作成および管理します。これらのステート ファイルでは、後続のリンクはインクリメンタルに処理されるため、トータルのリンク時間が大幅に削減されます。「リンカ ステート ファイル」および「デバッグ情報ファイル」を参照してください。
モジュール定義ファイル
モジュール定義ファイルは、Windows アプリケーションの内容やシステム要件に関する情報を ILINK32 に伝えるためのテキスト ファイルです。 モジュール定義ファイルは IMPDEF.EXE を使用して作成でき、インポート ライブラリは、IMPLIB.EXE を使用してモジュール定義ファイルから作成できます。
モジュール定義が指定されなかった場合、次のデフォルトとみなされます:
CODE PRELOAD MOVEABLE DISCARDABLE DATA PRELOAD MOVEABLE MULTIPLE (for applications) PRELOAD MOVEABLE SINGLE (for DLLs) HEAPSIZE 4096 STACKSIZE 1048576
アプリケーションの属性をこれらのデフォルトから変更するには、モジュール定義ファイルを作成する必要があります。
EXETYPE
文を削除すると、リンカは、コマンドラインに指定したオプションから、どのタイプの実行可能ファイルを生成したいのか判断することができます。
インポート ライブラリをインクルードして、モジュール定義の IMPORTS
セクションを補完することも可能です。
C および C++ ソース コードのエクスポート関数の定義で、キーワード __declspec(dllexport)
や _export
を使用すると、EXPORTS
セクションが必要なくなります。ただし、__declspec(dllexport)
や _export
が、関数のエクスポートのために使用された場合、その関数は順番ではなく、名前によってエクスポートされている点に留意してください。また、__declspec(dllexport)
の方がエクスポートの推奨メソッドである点にも留意してください。
詳細については、「モジュール定義ファイル」を参照してください。
リンカ ステート ファイル
4 つあるリンカ ステート ファイルには、次のファイル拡張子がついています:
- .ILC (リンカ コード ファイル)
- .ILD (リンカ データ ファイル)
- .ILF (リンカの他のファイル)
- .ILS (リンカ シンボル ファイル)
これらの 4 つのファイルは、インクリメンタル リンクに必要となります。
リンカ ステート ファイルは、[プロジェクト|オプション...|C++ リンカ]ページで、次のようにコントロール可能です:
- リンカ ステート ファイルの生成を無効にするには、[インクリメンタル リンクを無効にする](-Gn) オプションにチェックをつけます。
- 現在のリンカ ステート ファイルをクリアし、次のリンク オペレーションで新しいものを作成するには、[リンクの前にリンカ ステート ファイルをクリア](-C)オプションにチェックをつけます。
デバッグ情報ファイル
リンクの完了した最終的な実行可能ファイルにデバッグ情報を組み込む場合、ILINK32 は常にデバッグ情報を別個の TDS デバッグ ファイル(デフォルトでは、<project>.tds
)に格納します。デバッガでは、このデバッガ情報ファイルを読み取れるはずです。 ILINK32 では常にこのファイルを生成します。 リンカ スイッチ-v
(または /v
)を設定しない場合、デバッグ シンボル ファイルは無効としてマークされます。
DCC32.exe(Delphi コンパイラ)には、デバッグ シンボル ファイルを生成するためのコマンド ライン スイッチ(-VT
)があります。 Delphi コンパイラにデバッグ シンボル ファイルを生成するようには、[プロジェクト オプション]の[リンク]ページにある[デバッグ情報を別個の TDS ファイルに保存する]を有効にすることでも指定できます。
ILINK64
ILINK64 は、C++ 64 ビット Windows アプリケーション用のリンカです。 ILINK64 のコマンド構文や使用方法については、ILINK32 とほぼ同様です。2 つの Windows 用 C++ リンカの主な違いは以下のとおりです。
- ILINK32 は、
.obj
ファイルおよび.lib
ファイルをリンクして、32 ビット Windows 実行可能ファイルまたは.dll
を生成します。 - ILINK64 は、
.o
ファイルおよび.a
ファイルをリンクして、64 ビット Windows 実行可能ファイルまたは.dll
を生成します。
このような違いはありますが、2 つのリンカは同じように使用できます。
ILINK64 エラーの処理
BCC64 のエラーと警告は、ILINK64(64 ビット Windows 用 C++ リンカ)からの、次のエラーの処理を記述しています:
Public symbol 'x' defined in both module A and B
プロジェクトによっては、膨大な数のデバッグやその他のデータを持つものもあり、デフォルトの設定のままではリンカでエラーが発生する場合があります。このタイプのエラーを処理する方法については、「リンカのメモリ不足エラーの処理」を参照するか、リンカのメモリ使用量を減らすのに役立つ スプリット DWARF 機能について学習するといいでしょう。