自己格納式の呼び出し可能な共有オブジェクト

自己格納式の呼び出し可能な共有オブジェクトは、実行可能ファイルに似ていますが、COBOL 以外の実行可能ファイルによってロードされるように設計されています。cob コマンドを使用できない場合にのみこのタイプのオブジェクトを使用して、DB2 などのサード パーティの実行可能ファイルで使用する際などにオブジェクトをメイン実行可能ファイルに再リンクします。

次のように、-y cob フラグを使用して、自己格納式の呼び出し可能な共有オブジェクトを作成します。

cob -y obj1.o obj2.o obj3.o

デフォルトでは、生成されるファイルのベース名にはリンクされる最初のファイルの名前が使用され、ファイル拡張子 .so が付けられます。上記の例では、ファイル obj1.so になります。ベース名でメイン エントリ ポイントが形成されますが、これは -e フラグを使用してオーバーライドできます。

入力ファイルとしては、.gnt ファイル以外のタイプのファイルを指定できます。オブジェクト モジュール ファイル (.o) を使用する場合、これらのファイルはシステム リンカー (ld) を使用してリンクされます。また、CC オプションを使用して、C++ オブジェクトをライブラリ ファイルにリンクすることもできます。C++ ソース ファイルが指定されると、最初に C++ コンパイラが起動されてこれらをオブジェクトにコンパイルします。

自己格納式の呼び出し可能な共有オブジェクトをロードするには、次のように dlopen() 関数を使用する必要があります。

handle=dlopen("obj1.so", RTLD_GLOBAL|RTLD_NOW);

Linux プラットフォームで自己格納式の呼び出し可能な共有オブジェクトをビルドし、.int または .gnt ファイルにビルドされた COBOL モジュールを呼び出す場合は、メイン (COBOL 以外) 実行可能ファイルをリンクする際に次の追加オプションを指定する必要があります。 -Wl,-zexecstack

次に例を示します。

gcc -m32 -o mymainexe mymain.o -g -ldl -Wl,-zexecstack
制約事項: 一度にプロセスにロードできる自己格納式の呼び出し可能な共有オブジェクトは 1 つだけです。したがって、同じプロセスに別の自己格納式の呼び出し可能な共有オブジェクトをロードする前に、現在の自己格納式の呼び出し可能な共有オブジェクトをアンロードする必要があります。