実行可能ファイルの形式

プログラムを実行またはデバッグするには、実行可能ファイルにコンパイルする必要があります。本トピックでは、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 がある場合(Windows) または 拡張子がない場合(UNIX) があります。

実行可能コードを作成するには、COBOL プロジェクトまたはリモート COBOL プロジェクトのどちらかが必要です。[Project > Properties > Micro Focus > Build Configuration] を選択し、[All Executable Files] または [Single Executable File] の [Target types] オプションを選択して、構成を作成または編集します。

オブジェクト コード
オブジェクト コード ファイルは、プロジェクトをビルドする際に作成されます。オブジェクト コード ファイルは実行可能ではなく、ランタイム システムにリンクして実行可能ファイルを生成する必要があります。

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

.exe ファイルまたは .dll ファイル(Windows) または 実行可能ファイル、呼び出し可能な共有オブジェクト ファイル、または共有ライブラリ ファイル(UNIX) を作成するには、オブジェクト コード ファイルをリンクする必要があります。

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

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

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

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

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

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

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

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

呼び出し可能な共有オブジェクト ファイル (UNIX) のファイル名には、拡張子 .so が付けられます。

推奨事項

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

.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 > Properties > Micro Focus > Build Configuration] をクリックし、[All Int/Gnt Files] の [Target types] オプションを選択して、構成を作成または編集します。
  2. [Package as .lbr] を選択します。
次回プロジェクトをビルドするとき、プロジェクトは .int または .gnt ファイルを通常どおりビルドし、それらをすべてを .lbr ファイルに含めます。
制約事項: .lbr ファイルは JVM プロジェクトにコンパイルできません。