JNIを使用して既存のCOBOLアプリケーションを呼び出そうとしています。 COBOLのアプリケーション構造は以下の通りです。オープンなcobol dllを含むjniコール
c-wrapper(main)-->COBOLProgram -> several dyn(.so) and static called modules
既存のCOBOLアプリケーションは、いくつかの静的と呼ばれるサブプログラム(COBOL)と多くの動的(COBOL)のものが含まれます。
アプリケーションのJni呼び出しは正常ですが、COBOL動的サブモジュールを見つけて呼び出すことができませんでした。以下のように(JNI用)
変更されたアプリケーションの構造は次のとおりです。
java class --> libjni.so --> appl.so
は私がCALL前COB_LIBRARY_PATHとLD_LIBRARY_PATH環境変数を確認し、それらは罰金のようです。
ケースダイナミックモジュールに次のエラーメッセージがあります。
libcob: ....<module>.so: undefined symbol: cob_save_call_params
私はLinuxで64ビット、1.1.0を使用します。 gccはcobcコマンドのc出力を使用してバイナリを作成するために使用されます
LD_LIBRARY_PATHは、libcobとそれが必要とするso-fileだけを指し示す必要があります。 COB_LIBRARY_PATHにはすべてのCOBOLモジュールが含まれている必要があります。 どのように見えますか? Javaランタイムとlibcobとアプリケーションファイルの両方に同じアーキテクチャ(32/64ビット)を使用してもよろしいですか?あなたが得た正確なエラーは何ですか? OpenCOBOLのどのバージョンを使用していますか? –
エラーメッセージとOCバージョンを使用して質問を更新しました。私は呼び出し後に例外で使用したので、エラーは表示されませんでした。 – cobp
OK、問題は呼び出されたモジュールではなく、libcob自体のシンボルの1つにあります。 'export LD_PRELOAD =/path/to/libcob.so'でモジュールのロードを強制するのに役立ちますか? BTW: "linux"はあまり具体的ではありません;-)サイド質問:[ごめんなさい。] [GnuCOBOL 2.0 devスナップショット](https://sourceforge.net/projects/open-cobol/)ファイル/ gnu-cobol/2.0/gnu-cobol-2.0_nightly_r624.tar.gz /ダウンロード)もありますか? –