2017-02-03 12 views
2

私はCOBOLとJavaをメインフレーム上で相互にやりとりさせようと努力してきましたが、特にcob2コンパイラメインフレーム相当のUnix。メインフレーム上のUnix:COB2コンパイラ、Java呼び出し用COBOL

このコンパイラはオンラインで多くのユーザーエクスペリエンスを経験していませんでしたので、より直接的な質問をしてもらえれば幸いです。

IBMには、COBOL DLLを直接的または間接的に呼び出すいくつかの例がありますが、最終的にはCOBOLをdllとしてコンパイルし、System.loadを使用してJavaをコンパイルして実行します。これらの例は、次の理由から私のために働いていません。

-cオプションを指定してcob2を使用すると、.oオブジェクトファイルが生成されます。これは空の.lstファイルを生成したにもかかわらず、私にとっては起こりませんでした。これは、Javaプログラムとのリンクのために必要とされる.soのライブラリを提供するように見える

` sh ${COB2HOME}/bin/cob2 -o ${DIR}/c2jcr.o 
     -qdll,thread,case=mixed ${DIR}/c2jcr.cbl; 
     ${COB2HOME}/bin/cob2      
     -o ${DIR}/libc2jcr.so      
     -bdll,case=mixed ${DIR}/c2jcr.o   
     ${JAVAHOME}/bin/j9vm/libjvm.x    
     ${COB2HOME}/lib/igzcjava.x    ` 

、しかし:私は単に-cステップをスキップしてコンパイルするとこの一連のコマンドを使用してリンクすることによってこの問題を回避することができました負荷の調査時および運転中に、システムはLE CSECT CEESTARTが存在しないことを宣言する。

私はこれらのLEモジュールを持っている私のcob2ライブラリ、またはスクリプトのどこかに何かがないのですか?私はLEモジュールをそのままメインフレームからロードし、ENTRY CEESTARTはリンクステップで明示的に述べたが、 "UnsatisfiedLinkError"より "Internal Error"を得ることはできなかった。

JavaからCOBOLを呼び出すための全く別のルートをダウンした場合は、どんなご愛顧を賜りますようお願い申し上げます。どうもありがとうございました。

+0

-cが.oファイルを生成しなかったと主張する場所で使用していたコマンドを提供できますか。 –

+0

はい、お返事ありがとうございます。 sh $ {COB2HOME}/bin/cob2 -c -qdll、thread、case = mixed $ {DIR} /c2jcr.cbl – user7509237

+0

その他の質問:COBOLにはどのコンパイラのバージョンを使用していますか? LibraryName.ProgramName()Vまたは ます。java.lang.UnsatisfiedLinkError:あなたが ます。java.lang.UnsatisfiedLinkErrorを取得しているエラーであるライブラリ名(java.library.pathの中に見つからない) または何か他のもの –

答えて

2

IBMと協議した後、私はいくつかの欠点がありました。

メインフレーム上のCOBOLコンパイラの場所にSTEPLIB環境フィールドを設定する必要があります。そのため、IGYCRCTLモジュールを見つけることができます。

第2に、他のCOBOL 5+コンパイルと同様に、コンパイルするために膨大な領域を割り当てる必要があります。 2 GBで十分ではありません。 Unixでこれを再割り当てする権限がないので、私はREGION = 0MのBPXBATCHジョブを実行しました。

これらの2つの変更の後、-cコンパイルが正常に行われました。私が質問で提供した「回避策」は完全に間違っています。あなたは使用する必要があります。

のsh $ {COB2HOME}/binに/ COB2 -c -qdll、スレッド、ケース=混合$ {DIR}あなたのコンパイルステップとして

た.cbl/$ {} COBPROG、残りちょうどリンケージです。

関連する問題