如何编译现有的 RPGLE 程序

How to compile exisiting RPGLE program

我需要对现有的工作 RPGLE 程序进行更改。当我进行直接编译时(来自 PDM 的选项 14),我得到的错误是 "DFTACTGRP(*NO) must be specified for a prototype that does not have the EXTPGM keyword."

我将 DFTACTGRP 更改为 *NO 并重新编译得到 "Errors were found during the binding step. See the job log for more information." 其中显示“原因......:没有找到定义供参考
GU_getTranslatedText 在库 QTEMP 中的 *MODULE 对象 OR404XX 中。这 定义不存在或不是相同的数据或过程
类型作为参考。 “

在编译中我看到:

+D GU_getTranslatedText...                              
+D                 pr           198a   extproc('GU_-    
+D                                     getTranslatedText')   
+D                                     varying               
+D  inText                      198a   value varying   



C                   eval      XNAM =                                      
C                                GU_getTranslatedText('MONTHLY')    

调用中大约有 30 个这样的错误。除了将源代码复制到测试库并尝试编译它之外,我对现有程序不做。

我试着联系了最初的作者,我收到的唯一有用的信息是 "No binding directory needed"...我并没有具体说明。

关于我做错了什么以及如何编译它有什么想法吗?

也许这会解决问题。编译为模块然后执行

UPDPGM PGM(YOURPGM) MODULE(YOURMODULE)

执行 DSPPGM 以查看正在使用的 ACTGRP,然后添加以下控制 (H) 规范

  ctl-opt dftactgrp(*NO) actgrp('xxxx');

或者如果您受困于固定形式...

h dftactgrp(*no) actgrp('xxxx')

其中 'XXXX' 是使用 DSPPGM 找到的激活组。

您可能会查看是否存在包含参考服务程序的现有绑定目录 WRKOBJ OBJ(*LIBL/*ALL) OBJTYPE(*BNDDIR)。您可以使用控制规范中的 bnddir('xxxxx') 子句指定要使用的绑定目录。

据我了解,这里的问题是编译器找不到函数GU_getTranslatedText 此函数可以位于某个服务程序或您要编译的程序中,最初由几个模块组成,此函数位于另一个模块中。