我一直致力于让 COBOL 和 Java 在大型机上相互交互,但在 cob2 编译器(相当于大型机上的 Unix 编译器)方面遇到了麻烦。
我在网上还没有看到很多使用这个编译器的用户体验,所以我想知道如果我问一个更直接的问题,人们会透露他们的见解。
IBM 有几个 Java 直接或间接调用 COBOL DLL 的示例,但它们最终都归结为将 COBOL 编译为 dll、使用 System.load、编译 Java 并运行。由于以下原因,这些示例对我不起作用。
当使用带有 -c 选项的 cob2 时,据称会生成 .o 目标文件。这对我来说没有发生,尽管它确实生成了一个空的 .lst 文件。我可以通过简单地跳过 -c 步骤并使用这一系列命令进行编译和链接来解决这个问题:
` 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 `
这似乎提供了与 Java 程序链接所需的 .so 库,但在调查负载和运行期间,系统声明 LE CSECT CEESTART 不存在。
我是否在具有这些 LE 模块的 cob2 库中缺少某些内容,或者在我的脚本中缺少某些内容?我尝试从使用完整的 LE 模块编译的大型机中拉入负载,并在链接步骤中明确说明 ENTRY CEESTART,但无法获得比“UnsatisfiedLinkError”和“Internal Error”更进一步的结果。
非常感谢任何智慧,特别是如果您采用了完全不同的路线从 Java 调用 COBOL。非常感谢。
最佳答案
与 IBM 协商后,发现我缺少一些东西。
您必须将 STEPLIB 环境字段设置为大型机上 COBOL 编译器的位置,以便它可以找到您的 IGYCRCTL 模块。
其次,与其他 COBOL 5+ 编译一样,您必须分配大量空间才能进行编译。 2 GB 不够。由于我无权在 Unix 中重新分配它,因此我使用 REGION=0M 运行了 BPXBATCH 作业。
经过这两项更改后,-c 编译结果正常。我在问题中提供的“解决方法”是完全不正确的。您必须使用:
sh ${COB2HOME}/bin/cob2 -c -qdll,thread,case=mixed ${DIR}/${COBPROG}.cbl
作为您的编译步骤,其余的只是链接。
关于java - 大型机上的 Unix : COB2 compiler, 用于 Java 调用 COBOL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42016811/