一部のモジュールを静的に、その他のモジュールを動的にリンクする場合、次の操作を行う必要があります。
- 実行可能プログラムをビルドする際にリンカ指令 CALL を指定します。このためには、[Build Settings] ダイアログ・ボックスの [Assembler] ページの [Link] ページで [Resolve external calls at link time] をオンにします。CALL を設定すると、リンカはすべての外部参照を解決しようとします。
- 動的に呼び出すモジュールごとに、TYPE=COBOL または TYPE=ASM オペランドを指定して INCLUDE コマンドをリンク・ファイルにインクルードします。
. リンカが INCLUDE コマンドを処理する場合、モジュールは実際にインクルードされませんが、代わりに該当のエントリ・ポイントを動的に呼び出す小さなアセンブラ・モジュールが生成されてインクルードされます。実行時に CALL を実行すると、アセンブラ・モジュールは COBOL 実行時システムにモジュールをロードして制御をそのモジュールに転送するように要求します。
静的にリンクされたモジュールで定義されたエントリ・ポイントの中で、動的にリンクされたモジュールのエントリ・ポイントと一致するポイントがある場合、リンカ指令 NOEXPORT を使用して、メモリへのモジュールのロード後に呼び出し側プログラムで利用できる実行可能プログラムにリンカがエントリを作成できないようにする必要があります。
デフォルトでは、すべてのアセンブラ・モジュールの ENTRY、CSECT または START シンボルが COBOL 実行時システムのエントリ・ポイント・テーブルに通常ロードされるため、NOEXPORT によってこの動作は防止されます。
また、静的にリンクされたモジュール (メインの実行可能プログラムを含む) に対して ALIAS リンク・ファイル・コマンドも使用します。
この技術により、各モジュールに使用するリンクのタイプを正確に制御できます。