JNI と C を使って Java から COBOL プログラムを呼び出す

 さて、今度は、COBOL に Hello, world! を言わせましょう。

 まずは、COBOL プログラムを以下のようにつくります。ファイル名は hello.cob とします。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. hello.
       PROCEDURE DIVISION.
       DISPLAY "Hello, world!".
       EXIT PROGRAM.

 コンパイルを行います。リンクは行いません。

$ cobc -c hello.cob

 次に JavaCOBOL の間を取り持つ C のプログラムを作ります。前回の bridge_HelloCobol.c を書き換える形です。

#include <libcob.h>
#include "bridge_HelloCobol.h"

/* COBOL プログラムのプロトタイプ宣言 */
extern int hello(void);

JNIEXPORT void JNICALL Java_bridge_HelloCobol_sayHello(JNIEnv *env, jobject obj) {
    /* COBOL の初期化 */
    cob_init(0, NULL);

    /* COBOL プログラムの実行 */
    hello();
}

 コンパイルを行います。cob-config コマンドを使って、OpenCOBOL 用のオプションを与えている点に注意してください。

gcc -fPIC -g -I$JAVA_HOME/include/ -I$JAVA_HOME/include/linux/ `cob-config --cflags` -c bridge_HelloCobol.c

 最後にリンクします。ここでも cob-config コマンドを使って、OpenCOBOL 用のオプションを与えています。

$ gcc --shared `cob-config --libs` -o libHello.so *.o

 これで出来上がった libHello.so は、前回のエントリと同じ Java プログラムから呼び出すことができます。