java - 大型机上的 Unix : COB2 compiler, 用于 Java 调用 COBOL

标签 java unix cobol mainframe

我一直致力于让 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/

相关文章:

java - 如何在没有 Javafx/AWT 的情况下创建颜色渐变?

java - 为什么这么红? IntelliJ 似乎认为无法找到/解决每个声明/方法

linux - 将重定向符号与 find -exec 结合使用的更好方法

linux - 在 vim 中折叠代码让我感到困惑

bit-manipulation - COBOL 中的按位逻辑运算符?

java - Tomcat +jndi.properties

java - sqlite 查询中的无效字符?

unix - 如何使用curl 欺骗发件人IP 地址?

cobol - 'null' 的类型转换无效

cobol - fileaid 中的字帖错位