带bnddir的程序编译失败

发布于 2022-09-11 03:32:51 字数 1801 浏览 14 评论 9

本帖最后由 pantierui 于 2010-11-17 19:21 编辑

我在编译一个RPGLE程序的时候,bnddir的时候出错了。出错信息如下:
Definition supplied multiple times for symbol 'sendmsg'.
Message . . . . :   Definition supplied multiple times for symbol 'sendmsg'.  
Cause . . . . . :   Definition sendmsg was found to be exported from both     
  *MODULE object CMNFUNC in library *LIBL and *SRVPGM object QSOSRV1 in   
  library QSYS.                                                               
Recovery  . . . :   Try the Create Program (CRTPGM) or Create Service Program
  (CRTSRVPGM) command again, supplying only one of these objects, or try the  
  CRTPGM or CRTSRVPGM command again, specifying one or both of OPTION(*DUPVAR)
  and OPTION(*DUPPROC).                                                      
                                                                              
可是我改不了QSYS/QSOSRV1的属性。而CMNFUNC是个MODULE。
那位遇到过这类问题。帮忙解决一下。谢谢。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

近箐 2022-09-12 02:58:12

另外,你有一处错误:

因为你的代码定义了:
DConvertbarcode    PR             5I 0 EXTPROC('spVerifyHazmatByPart')
这是UDF的形式,即Pr后跟随返回参数。就是PI用return直接返回结果参数到被调用程序,所以不能用callp,直接用function名就可以了,如

d RetCode               s                 5I  0

/free
      ....
      RetCode = Convertbarcode(...) ;
      ....

/end-free

清欢 2022-09-12 02:57:08

本帖最后由 passthru 于 2010-11-23 13:05 编辑

MLSCMNFUNC    *MODULE     *LIBL

MLSCMNFUNC是*module,不是*srvpgm。所以,不能跨越MLSCMNFUNC,即不能直接调用MLSCMNFUNC下的procedure,spVerifyHazmatByPart。

如果MLSCMNFUNC是一个*srvpgm,spVerifyHazmatByPart是这个*srvpgm下的一个procedure,即*module,这样就可以直接从上面代码用udf形式直接调用。

另外,给你一个建议,用*,pointer作为传参,用一个ds,放入/copybook。这样的好处,不会因为参数的变化修改pr,pi的接口定义。代码如下:

*copybook
d ParmDs              ds               qualified
d  Parm1                     22
d  Parm2                     22
d  Parm3                     22
d  Parm4                     22
d  Parm5                       1

*rpgle中定义
*Pr定义,copybook
DConvertbarcode    PR             5I 0 EXTPROC('spVerifyHazmatByPart')
d Ptr                                          *
*
dParmInDs              ds              likeds(ParmDs) based(Ptr)

野却迷人 2022-09-12 02:55:18

"我在编译一个RPGLE程序的时候,bnddir的时候出错了。"

编译什么程序?你是如何在这个程序codes中用bind ...
passthru 发表于 2010-11-18 09:19

我编写的是一个rpgle程序。在rpgle中先声明要调用的程序的原型。
bndir(ptrlib/sample)中有多个引用的程序,如:
MLSCMNFUNC    *MODULE     *LIBL
JOBLOGMSGI     *MODULE     *LIBL
LLISTFUNC         *SRVPGM     *LIBL

rpgle中的声明
DConvertbarcode    PR             5I 0 EXTPROC('spVerifyHazmatByPart')
Dparm1                          22                                    
Dparm2                          22                                   
Dparm3                          22   
Dparm4                          22   
Dparm5                          1     

调用时
callp   Convertbarcode(pram1:pram2:pram3:pram4:pram5)

Convertbarcode程序在MLSCMFUNC中,是用c写的。

编译的时候用CRTBNDRPG,参数BNDDIR(ptrlib/sample)和DFTACTGRP(*no)

挽心 2022-09-12 02:42:50

方便地话,请加入到我们qq群来,可以实时交互交流。qq群:中国AS400/RPG技术中心,36500902,500人。

另 ...
passthru 发表于 2010-11-18 09:32

已经申请加入。

入怼 2022-09-12 02:41:02

方便地话,请加入到我们qq群来,可以实时交互交流。qq群:中国AS400/RPG技术中心,36500902,500人。

另外,我也准备一个UC群,500人,10252705,作为qq的备份。

遮了一弯 2022-09-12 02:29:47

"我在编译一个RPGLE程序的时候,bnddir的时候出错了。"

编译什么程序?你是如何在这个程序codes中用binddir?或编译时用binddir?

呵呵,一看到本贴,我就感到你对binddir不熟悉。等我们把你的编译问题解决后,我再讲解binddir的概念和使用。

So要识趣 2022-09-12 00:18:54

可是我的程序中没有用到sendmsg。况且我的bnddir中又没有QSOSRV1这个程序。
为什么他会检查这个啊。

bnddir是什么原理啊。

以前没怎么用过。

花期渐远 2022-09-11 20:39:05

本帖最后由 pantierui 于 2010-11-17 19:20 编辑

我已经知道他们是重名了。但我都不能改。因为那个*module不是我们写的。
所以才来问问大家。

陌若浮生 2022-09-11 17:14:34

本帖最后由 passthru 于 2010-11-17 19:05 编辑

"Message . . . . :   Definition supplied multiple times for symbol 'sendmsg'. "

重复定义了。

我估计,你的CMNFUNC 中的sendmsg,*module,与系统的QSOSRV1 *srvpgm下的sendmsg,*module同名了。

可以这样查看:wrksrvpgm QSOSRV1,查看是否有sendmsg名的module。如果有的话,把你的sendmsg改另外一个名字,再试试。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文