実行した時メモリに動的にロードされるサブプログラムは、次のように、cobcコマンドの「-m」オプションを使ってコンパイルする必要がある。
cobc –m sprog1.cbl または
cobc –m sprog1.cbl sprog2.cbl sprog3.cbl
上記の最初のコマンドは動的にロード可能なモジュールを1つ生成し、2番目の例は3つ生成する。
次のルールは、動的にロードされるモジュールとそれに含まれるサブルーチンに適用される。
「xxxxxxxx.cbl」または「xxxxxxxx.cob」という名前のソースファイルから生成された動的にロード可能なモジュールは、UNIXシステムでは「xxxxxxxx.so」、Windowsシステムでは「xxxxxxxx.dll」という名前になる。
単一のサブプログラムのみを含む動的にロード可能なモジュールは、単一のプログラムのみを含むopensource COBOLソースファイルから作成される。そのプログラムのPROGRAM-IDは、ソースコードのファイル名(マイナス「.cbl」または「.cob」)と動的にロード可能なモジュールのファイル名(拡張子「.so」または「.dll」を除く)と確実に一致する必要がある。
複数のサブプログラムを含む動的にロード可能なモジュールは、複数のプログラムを含む単一のopensource COBOLソースファイルから作成される。これらのプログラムの1つのPROGRAM-IDは、ソースコードのファイル名(マイナス「.cbl」または「.cob」)と動的にロード可能なモジュールのファイル名(マイナス「.so」または.dll」)と確実に一致する必要がある。このPROGRAM-IDは、動的にロード可能なモジュールのプライマリ記述項ポイントである。
プログラムが動的にロード可能なモジュール内のサブプログラムを呼び出すとき
a. opensource COBOLランタイムライブラリは、現在ロードされている動的にロード可能なすべてのモジュールで、サブプログラムの記述項ポイントを検索する(記述項ポイントは、CALL文でコード化された定数または一意名(6.7を参照))。その記述項ポイントは、動的にロード可能なモジュールを作成したソースファイル内のPROGRAM-ID(3章)または記述項ポイント(6.16章)のいずれかとして定義される。
b. 記述項ポイントが見つかった場合、制御はそこに移され、サブプログラムが実行を開始する。
c. 記述項ポイントが見つからなかった場合、opensource COBOLランタイムライブラリは「xxxxxxxx.so」(UNIX)または「xxxxxxxx.dll」(Windows)という名前のファイルを検索する。ここでのxxxxxxxxは目的のサブルーチン記述項ポイントを指す。
i. ファイルが見つかった場合は、ファイルがロードされ、そのファイル内の記述項ポイントに制御が移されるため、サブプログラムが実行を開始できる。
ii. ファイルが見つからなかった場合は、エラーメッセージ(「libcob:モジュール’xxxxxxxx’が見つかりません」)が出力され、プログラムの実行が中止する。
4項は、複数の記述項ポイントを含む動的にロード可能なモジュールを使用したサブプログラミングに深い影響を及ぼす―モジュール内の他の記述項ポイントを呼び出す前に、モジュールのプライマリ記述項ポイントを正常に呼び出す必要がある(3項を参照)。
「-x」オプションではなく「-m」オプション(上記コマンド参照)を使って、動的にロード可能なライブラリとしてメインプログラムを生成することも可能である。これらのメインプログラムを実行するには、8.2.2で説明しているように、cobcrunコマンドを使う必要がある。