高度な使用方法

cob -z オプションでは、COBOLや C のソースプログラムだけでなく、システムのオブジェクトモジュール (.o) を入力として処理することができます。これを使用して、他言語でコンパイルされた状態で提供されているモジュールを、 呼び出し可能共有オブジェクト化することができます。

例えば、以下のコマンドは、 COBOLソースファイル mycobol.cbl と Cソースファイル myc.c とコンパイル済みオブジェクトコード myobj.o とを入力として、呼び出し可能共有オブジェクト myapp.so を作成します。 myobj.o はどのような言語でコンパイルされたものであってもかまいません。 この共有オブジェクトの入り口点は myentry になりますが、これは入力ファイルのうちのどれに含まれていてもかまいません。

cob -zo myapp.so mycobol.cbl myc.c myobj.o 
    -e myentry

C++ 言語のソースプログラムを含む呼び出し可能共有オブジェクトを作成する場合、 -z,CC オプションを使用して C++コンパイラに最終的な呼び出し可能共有オブジェクトを作成することを指示します。 例えば、以下のコマンドは、 COBOLソースファイル mycobol.cbl と Cソースファイル myc.c と C++ ソースファイル mycpp.Cとを入力として、呼び出し可能共有オブジェクト myapp.so を作成します。 この共有オブジェクトの入り口点は myentry になりますが、これは入力ファイルのうちのどれに含まれていてもかまいません。

cob -z,CC -o myapp.so mycobol.cbl myc.c mycpp.C -e myentry

共有ライブラリはcobコマンドの -l と -L フラグを使用して、呼び出し可能共有オブジェクトにリンクすることができます。 この場合、共有ライブラリは呼び出し可能共有オブジェクトがロードされるときに同時にロードされ、呼び出し可能共有オブジェクトがアンロードされるときに同時にアンロードされます。 例えば、以下のコマンドは、共有ライブラリ libmylib.so を作成し、次いでそれを呼び出し可能共有オブジェクト myapp.so にリンクしています。 実行時に myapp.so がロードされると、オペレーティングシステムは共有ライブラリ libmylib.so を探索してロードします。

cob -Z mylib.cbl myobj.o
cob -zo myapp.so myprog.cbl myc.c -L. -lmylib -e myentry

呼び出し可能共有オブジェクトは、必ずしも COBOLモジュールを含んでいる必要はなく、C や C++ のオブジェクトやサードパーティの提供するオブジェクトだけから構成されていてもかまいません。

C, C++ またはサードパーティのオブジェクトは呼び出し可能共有オブジェクトや共有ライブラリにリンクすることができます。 例えば、これを利用してサードパーティ製品がインストールされていない環境でのエラーチェックを行うことができます。 そのためにはサードパーティのオブジェクトや共有ライブラリを呼び出し可能共有オブジェクトにリンクして実行環境で利用します。 この呼び出し可能共有オブジェクトを CALL ON EXCEPTION構文で呼び出すとき、サードパーティ製品がインストールされていない環境では ON EXCEPTION条件が発生し、この条件をチェックすることができます。