実行可能ファイルの形式

プログラムを実行またはデバッグするには、実行可能ファイルにコンパイルする必要があります。本トピックでは、Micro Focus COBOL コンパイラで生成できる各種の実行可能ファイルについて説明します。また、アプリケーションに最も適したファイル形式を選択する上で役立つ推奨事項を示し、パッケージ化を簡単にするために中間コード ファイルおよび生成コード ファイルを Micro Focus ライブラリ ファイルにバンドルする方法についても説明します。

.NET COBOL コード
.NET COBOL は、Windows および Linux のシステムにおいて共通言語ランタイム (CLR) で実行可能な共通中間言語にコンパイルされます。

.NET アセンブリに対応する手続き型 COBOL コードの生成がサポートされるほか、COBOL 言語のオブジェクト指向の拡張機能も提供されています。

JVM COBOL コード
JVM COBOL は、Java 仮想マシンで実行可能な Java バイトコード (.class ファイル) にコンパイルされます。

Java .class ファイルに対応する手続き型 COBOL コードの生成がサポートされるほか、COBOL 言語のオブジェクト指向の拡張機能も提供されています。

実行可能コード
実行可能コードは、コンパイルとリンクを一度に実行して生成します。

実行可能ファイルには、ファイル名拡張子 .exe がある場合 があります。

実行可能コードを生成するには、プロジェクト プロパティの [Output Type] 設定を変更する必要があります。

オブジェクト コード
オブジェクト コードは、ソース コード ファイルをコンパイルして生成できるほか、テスト済みの .int ファイルをコンパイルして生成することもできます。オブジェクト コード ファイルは実行可能ではなく、ランタイム システムにリンクして実行可能ファイルを生成する必要があります。

デフォルトでは、オブジェクト コード ファイルには、拡張子 .obj が付けられます。

.exe ファイルまたは .dll ファイル を作成するには、オブジェクト コード ファイルをリンクする必要があります。

中間コード
中間コード ファイル (拡張子 .int) は、通常はテストやデバッグに使用されます。コンパイラは、プログラム構文をチェックするとき、その最初の段階で中間コード ファイルを作成します。中間コード ファイルのコンパイルは高速です。

.int ファイルは動的にロード可能なファイルであり、システム実行可能ファイルにリンクする必要はありません。これらのファイルを実行可能ファイルとしてユーザーに配布できますが、この用途には .exe ファイルおよび .dll ファイルを使用することをお勧めします。

生成コード
生成コード ファイル (拡張子 .gnt) は、要求に応じて第 2 段階でコンパイラによって作成されます。生成されたコードのコンパイルは中間コードよりも低速ですが、作成されるコードはより高速に実行します。

.gnt ファイルは動的にロード可能なファイルであり、システム実行可能ファイルにリンクする必要はありません。これらのファイルを実行可能ファイルとしてユーザーに配布できますが、この用途には .exe ファイルおよび .dll ファイルを使用することをお勧めします。

ダイナミック リンク ライブラリ
ダイナミック リンク ライブラリは、実行時に必要に応じて、すなわちメイン エントリ ポイントとして (たとえば run により) 参照されている場合または COBOL CALL 構文により参照されている場合に、動的にロードされます。ダイナミック リンク ライブラリ のすべてのエントリ ポイントがキャンセルされると、ファイルはアンロードされすべての使用メモリが解放されます。

この動作は、.int コードおよび .gnt コードと同じですが、リンクされた共有ライブラリや、システムの実行可能ファイルとは異なります。リンクされた共有ライブラリや、システムの実行可能ファイルは、使用されるかどうかにかかわらず、常にプロセスの開始時にロードされます。また、それらのファイルにより使用されているコードとメモリは、プロセスの終了時にのみ解放されます。

ダイナミック リンク ライブラリは、複数の COBOL プログラムから構成したり、C や C++ など、他の言語によるプログラムを混在させたりすることができます。また、ダイナミック リンク ライブラリをサード パーティが提供するオブジェクト ファイルや共有ライブラリにリンクすることもできます。この動作はシステム実行可能ファイルおよび共有ライブラリに似ていますが、.int ファイルおよび .gnt ファイルとは異なります。これらの場合、各ファイルが 1 つの COBOL プログラムと対応します

ダイナミック リンク ライブラリ には、ファイル名拡張子 .dll が付けられます。

推奨事項

本セクションでは、各ファイル形式をどのような状況で使用すべきかに関する一般的なガイダンスと推奨事項を示します。

.int ファイルには、さまざまなハードウェア プラットフォーム間で移植できるという利点があります。ただし、いずれかのターゲット アーキテクチャ用に最適化されるわけではないため、一般に特定のプラットフォーム用に生成されたコードよりも実行速度が遅くなります。

.gnt ファイルは特定のチップセット用に最適化されます。一般に .int コードよりも実行速度は速くなります。Micro Focus では、アプリケーションのパフォーマンスを最大限に高めるために、生成された実行可能ファイルを使用することをお勧めします。

.gnt ファイルは、実行時にオペレーティング システムによってロックされません。そのため新しいファイルをオーバーレイすることが可能ですが、これはお勧めしません。

.dll.exe などの標準の形式の実行可能ファイルもターゲット プラットフォーム用に最適化され、デジタル署名することができます。これらの形式では複数のプログラムを含めることもできます。

Micro Focus では、標準の形式の実行可能ファイルを使用することをお勧めします。

中間コード ファイルまたは生成されたコード ファイルのバンドル

.int ファイルおよび .gnt ファイルを Micro Focus ライブラリ ファイルにバンドルできます。このバンドルには次の利点があります。

  • ユーザーに配布するファイル数が減り、ファイルのパッケージ化が容易になります。
  • プログラムでライブラリ ファイルに保存されているサブプログラムを呼び出すとき、ライブラリ ファイルとその中にロードされたすべてのプログラムがメモリにロードされます。これによりプログラムの実行を高速化できます。

ライブラリ ファイルには、ファイル名拡張子 .lbr が付けられます。

たとえば、アプリケーションに次のようなプログラムがある場合、
図 1. アプリケーションのプログラム
Programs in application

ProgC および ProgD を生成されたコード ファイルとしてコンパイルし、ライブラリ ファイル mylib.lbr に置くことができます。ProgA が ProgC を呼び出すと mylib.lbr がメモリにロードされ、progc.gntprogd.gnt もロードされます。proga.gntprogb.gntmylib.lbr のほか、トリガー プログラムも併せて配布する必要があります。

.int ファイルおよび .gnt ファイルを .lbr ファイルにパッケージ化するには、次のプロパティを設定します。

  1. [Project > MyProject Properties] をクリックしてプロジェクトのプロパティに移動します。
  2. [Application] タブをクリックします。

    プロジェクトの [Output type] を [INT/GNT] に設定する必要があります。

  3. [Package as .lbr] をオンにして変更内容を保存します。

    次回プロジェクトをビルドするとき、プロジェクトは .lbr にコンパイルされます。

重要: 出力ファイルを .lbr ファイルとしてパッケージ化するようにプロジェクトが設定されている場合、.int または .gnt コードにコンパイルされるプロジェクトをデバッグすることはできません。このようなプロジェクトをデバッグするには、あらかじめプロジェクト プロパティの [アプリケーション] ページで [.lbr にパッケージ化] の設定を無効にする必要があります。