リンク・エディット・パーツの例

リンク・エディット・パーツは、z/OS® 環境で使用されます。 一般に、EGL はリンケージ・エディター制御ステートメントを自動的に生成します。 ただし、静的リンクがある場合など、一部の状況では、ユーザーがリンク・エディット・パーツを提供する必要があります。

プログラムのリンク・エディット・パーツは、プログラムが使用可能なときにいつでも使用できるよう、プログラムと同じ プロジェクト内で定義するのが最良の方法です。 リンク・エディット・パーツには、プログラムを含むロード・モジュールをすべてリンクするために リンケージ・エディター制御文が含まれている必要があります。

構文と形式の規則

リンク・エディット・パーツの制御ステートメントは、リンケージ・エディターの構文と形式に関する以下のような規則に従う必要があります。
  • 文は 1 列目で開始してはならない。
  • 文間にブランク行を入れることはできない。
リンケージ・エディター制御ステートメントの使用方法については、ご使用のホスト・システムのリンケージ・エディターの資料を 参照してください。

他のプログラムへの静的呼び出しを使用した zSeries プログラム

リンケージ・エディター制御ステートメントが含まれるリンク・エディット・パーツは、静的 COBOL 呼び出しを含む 生成済みプログラムごとに定義されていなければなりません。 リンケージ・エディター制御ステートメントは、ENTRY 文および NAME 文 (ロード・モジュールの場合)、および INCLUDE 文 (静的呼び出し先プログラムおよび基本プログラムの場合) で構成されます。 z/OS バッチおよび IMS™ BMP 環境には、COBOL ランタイム (IBM® Rational® COBOL Runtime Server for zSeries) のエントリー・スタブ・プログラム (ELARMAIN) も組み込まれている必要があります。他の COBOL ランタイムおよびデータベース・スタブは、生成プロセス時に作成された元の リンク・エディット・ステップからのプログラムとともに組み込まれます。

次の表では、生成された COBOL プログラム EGLAPP1 と PL/I プログラム PLIAPP1 の両方を静的に呼び出す プログラム BASEPGM の制御文の例を示します。 この例では、PL/I プログラムのオブジェクト・デックが、DD ステートメント NONEGLL によって参照されるデータ・セット NONEGLL.OBJ.LIBRARY に書き込まれています。 呼び出し先プログラムの INCLUDE 文はすべて、呼び出し側プログラムの INCLUDE よりも前に置きます。

表 1. 制御ステートメントの例
環境 基本プログラム・タイプ BASEPG における制御ステートメント

CICS for z/OS
IMS/VS

メインまたは呼び出し先
INCLUDE SYSLMOD(EGLAPP1)
INCLUDE NONEGLL(PLIAPP1) (注 1 を参照)
INCLUDE SYSLMOD(BASEPGM)
ENTRY BASEPGM
NAME BASEPGM(R)

IMS BMP
z/OS バッチ

メインのみ
CHANGE ELAAPPL(BASEPGM)
INCLUDE SELALMD(ELARMAIN)
INCLUDE SYSLMOD(EGLAPP1)
INCLUDE NONEGLL(PLIAPP1)
INCLUDE SYSLMOD(BASEPGM)
ENTRY ELARMAIN
NAME BASEPGM(R)

IMS BMP
z/OS バッチ

呼び出し先のみ
INCLUDE SYSLMOD(EGLAPP1)
INCLUDE NONEGLL(PLIAPP1)
INCLUDE SYSLMOD(BASEPGM)
ENTRY BASEPGM
NAME BASEPGM(R)

1. PL/I プログラムを CICS® for z/OS 用に静的にリンクすることはできません。CICS for z/OS では、このリンクは静的にリンクされている非 EGL COBOL プログラムにリンクされます。

NONEGLL ライブラリーを再リンク・ステップに対して使用可能にするには、DD ステートメントをビルド・スクリプトに追加しなければなりません。 この例では、次の行をコード内で検索します。
//* Add your DD statements here if you supply your own link edit parts
次に、この行の下に以下のような新規の行を追加します。
//* Add your DD statements here if you supply your own link edit parts
//NONEGLL DD DSN=NONEGLL.OBJ.LIBRARY,DISP=SHR

他のプログラムによって静的に呼び出される zSeries プログラム

リンク・エディット・ステートメントが含まれるリンク・エディット・パーツはまた、別のプログラムからの静的 COBOL 呼び出しの ターゲットである EGL プログラムごとに定義する必要があります。 リンク・エディット・パーツに、EGL プログラムを呼び出すすべてのロード・モジュールをリンクするステートメントを組み込み、 呼び出された EGL プログラムが生成されるたびに各ロード・モジュールが自動的に再リンクされるようにします。

例えば、COBOL 生成プログラム EGLAPP1 を BASEPGM および BASEPG2 で静的に呼び出す場合、EGLAPP1 用のリンク・エディット・パーツを定義して、前のテーブルからのランタイム環境のステートメントのセットが 2 回含まれるようにします (1 回は BASEPGM の参照、もう 1 回は BASEPG2 の参照)。 これにより、EGLAPP1 を生成するたびに BASEPGM と BASEPG2 の両方が再リンクされるようになります。

EGL ビルド・スクリプトの変更

プログラムが静的 COBOL 呼び出しのターゲットであり、他のプログラムへの静的 COBOL 呼び出しも含まれている 場合は、EGL ビルド・スクリプトをさらに調整して、異なるロード・ライブラリーを、生成されたプログラムのロード・モジュール用の インクルードおよび出力ライブラリーとして使用する必要があります。

次の例は、変更前の SYSLMOD DD ステートメントを示しています。
//SYSLMOD DD DISP=SHR,DSN=&CGHLQ..&ENV..LOAD
次の例は、SYSLMOD DD ステートメントの代わりとなる DD ステートメントを示しています。
//EGLINCL DD DISP=SHR,DSN=&CGHLQ..&ENV..LOAD
//SYSLMOD DD DISP=SHR,DSN=&CGHLQ..&ENV..RELINK.LOAD
次に、 リンク・エディット・ステートメントを含むすべてのリンク・エディット・パーツを定義して、EGLINCL ライブラリーを生成済みプログラムのインクルード・ライブラリーとして使用します。この方法でライブラリーをセットアップすることには、以下のような効果があります。
  • 準備プロシージャーにおける最初のリンク・エディット・ステップでは、COBOL ランタイムで生成された プログラムおよびデータベース・スタブ・プログラムを EGLINCL ライブラリーにリンクします。
  • 静的呼び出し先プログラムは、再リンク・ステップ時に同じプログラムが複数回組み込まれることを回避する ため、EGLINCL ライブラリーにともにリンクされることはありません。
  • 再リンク・ステップでは、静的にリンクされたすべてのプログラムを適切なロード・モジュールに結合し、その ロード・モジュールを SYSLMOD ライブラリーに保存します。

制御ステートメントの指定

下の表で、静的呼び出し先プログラム EGLAPP1 がプログラム EGLAPP2 を静的に呼び出した場合に、プログラム BASEPGM を リンクするための制御ステートメントを指定する方法を示します。 プログラム BASEPGM をリンクするための制御ステートメントは、プログラム EGLAPP1 または EGLAPP2 のいずれかの生成時に プログラム BASEPGM が再リンクされるように、EGLAPP1 および EGLAPP2 リンク・エディット・パーツにも追加されなければ なりません。

表 2. 制御ステートメントの例
環境 基本プログラム・タイプ BASEPG における制御ステートメント

CICS for z/OS
IMS/VS

メインまたは呼び出し先
INCLUDE EGLINCL(EGLAPP1)
INCLUDE EGLINCL(EGLAPP2)
INCLUDE NONEGLL(PLIAPP1) (注 1 を参照)
INCLUDE EGLINCL(BASEPGM)
ENTRY BASEPGM
NAME BASEPGM(R)

IMS BMP
z/OS バッチ

メインのみ
CHANGE ELAAPPL(BASEPGM)
INCLUDE SELALMD(ELARMAIN)
INCLUDE EGLINCL(EGLAPP1)
INCLUDE EGLINCL(EGLAPP2)
INCLUDE NONEGLL(PLIAPP1)
INCLUDE EGLINCL(BASEPGM)
ENTRY ELARMAIN
NAME BASEPGM(R)

IMS BMP
z/OS バッチ

呼び出し先のみ
INCLUDE EGLINCL(EGLAPP1)
INCLUDE EGLINCL(EGLAPP2)
INCLUDE NONEGLL(PLIAPP1)
INCLUDE EGLINCL(BASEPGM)
ENTRY BASEPGM
NAME BASEPGM(R)

1. PL/I プログラムを CICS for z/OS 用に静的にリンクすることはできません。CICS for z/OS では、このリンクは静的にリンクされている非 EGL COBOL プログラムにリンクされます。

プログラムの実行時には、再リンク・ロード・ライブラリーおよび元のロード・ライブラリーが必要です。 再リンク・ライブラリーは静的にリンクされたモジュールで必要になります。 元のライブラリーは、静的にリンクされる必要のなかったモジュールで必要になります。 次の例は、ランタイム JCL ファイル、IMS および CICS 領域の JCL ファイルをカスタマイズして、ロード・ライブラリーを STEPLIB ステートメントに正しい順序で組み込む方法を示しています。
// DD DISP=SHR,DSN=chglq.system.RELINK.LOAD
// DD DISP=SHR,DSN=chglq.system.LOAD
変数 chglq および system は、ビルド・スクリプト内で CGHLQ および ENV パラメーターの代わりに使用される値を表します。

フィードバック