View previous topic :: View next topic
Author
Message
robert-ohlen New User Joined: 01 Jun 2007Posts: 11 Location: Soiron
When I compile the Package routine, I haven't problem; but when I compile the Main procedure, I have a message that indicates unknown procedure in a package routine:
IBM1237I E 16.0 EXTERNAL ENTRY attribute is assumed for PUSH.
IBM1237I E 18.0 EXTERNAL ENTRY attribute is assumed for VIEW.
Is there an option or a parameter with the link edit to make known the procedures of the package?
Here the code of the two programs:
Main Procedure.
Code:
PLI037G: PROC OPTIONS(MAIN) REORDER;
DCL 1 ST1,
2 CLE_ST UNION,
3 CLE FIXED BIN(31),
3 CLE_C CHAR(4),
2 DATA CHAR(15);
DCL PLI037B ENTRY;
DCL LIST1 PTR INIT(NULL());
DCL SYSPRINT FILE STREAM OUTPUT PRINT;
DCL I FIXED BIN(31);
DCL ALPHA CHAR VALUE('ABCDEFGHIJKLMNOPQRSTUVWXYZ');
DO I=1 TO 26;
ST1.CLE =I*1000;
ST1.DATA=REPEAT(SUBSTR(ALPHA,I,1),14);
CALL PUSH(LIST1,ST1.CLE_C,ST1.DATA);
END;
CALL VIEW(LIST1,ST1.CLE_C,ST1.DATA);
END PLI037G;
And Package routine.
Code:
PLI037B: PACKAGE EXPORTS (*);
DCL LGCLE FIXED BIN(31);
DCL LGDATA FIXED BIN(31);
DCL 1 ST BASED,
2 CLE CHAR(LGCLE),
2 DATA CHAR(LGDATA),
2 PREC PTR;
/*-------------------------------------------------------------------*/
PUSH: PROC(DEBUT,CLE,DATA) REORDER;
DCL DEBUT PTR;
DCL CLE CHAR(*);
DCL DATA CHAR(*);
LGCLE=STG(CLE);
LGDATA=STG(DATA);
ALLOCATE ST SET(DEBUT);
DEBUT->ST.CLE=CLE;
DEBUT->ST.DATA=DATA;
DEBUT->ST.PREC=NULL();
END PUSH;
/*-------------------------------------------------------------------*/
VIEW: PROC(DEBUT,CLE,DATA) REORDER;
DCL DEBUT PTR;
DCL CLE CHAR(*);
DCL DATA CHAR(*);
LGCLE=STG(CLE);
LGDATA=STG(DATA);
DCL TMP PTR;
TMP=DEBUT;
DO WHILE(TMP^=NULL());
PUT SKIP EDIT('CLE:',TMP->ST.CLE,' DATA:',TMP->ST.DATA)(A);
TMP=TMP->ST.PREC;
END;
END VIEW;
END PLI037B;
Back to top
ilanjai New User Joined: 11 Jul 2007Posts: 2 Location: Hyderabad
Change the following statement
DCL PLI037B ENTRY;
to
DCL PLI037B EXTERNAL ENTRY;
Ensure that PLI037B is part of your Link Edit step.
It should start working
Back to top
robert-ohlen New User Joined: 01 Jun 2007Posts: 11 Location: Soiron
It's a value by default. The message in the compilation is
PLI037B CONSTANT EXTERNAL ENTRY
And in the compile JCL, a library of PLI037B is in SYSLIB.
have you an other idea ?
Back to top
robert-ohlen New User Joined: 01 Jun 2007Posts: 11 Location: Soiron
If that can help you to help me, here the jcl of compilation
Code:
//*--------------------------------------------------------------------
//* COMPILE STEP
//*--------------------------------------------------------------------
//PLI IF RC LT 9 THEN
//PLI EXEC PGM=IBMZPLI,REGION=0M,
// PARM='àDD:OPTIONS,LIST,MAP,OFFSET,NOSTMT'
//STEPLIB DD DSN=IBMZ.SIBMZCMP,DISP=SHR
//OPTIONS DD *
AGGREGATE,ARCH(5),ATTRIBUTES(FULL),BACKREG(11),BIFPREC(15),CMPAT(V2),
DFT(REORDER,BYADDR,RETURNS(BYVALUE),CONN,DESCRIPTOR),FLAG(I),FLOAT(AFP),
EXTRN(SHORT),GONUMBER,INSOURCE,LIMITS(EXTNAME(7),FIXEDDEC(15,31)),
LINECOUNT(48),MACRO,MARGINS(2,72,1),MAXMSG(32767),NEST,NOMARGINI,
NORENT, OPTIONS,OPT(TIME),RULES(IBM),TUNE(5),SOURCE,STMT,XREF(FULL)
/*
//SYSLIB DD DSN=&SYSUID..T.COPY,DISP=SHR
//SYSIN DD DSN=&SYSUID..T.PGMVA(PLI037A),DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSLIN DD DSN=,DISP=(MOD,PASS),UNIT=SYSDA,
// SPACE=(CYL,(1,1)),DCB=(LRECL=80,BLKSIZE=0)
//SYSUT1 DD DSN=,UNIT=SYSDA,
// SPACE=(1024,(200,50),,CONTIG,ROUND),DCB=BLKSIZE=1024
//PLI ENDIF
//*--------------------------------------------------------------------
//* LINK STEP
//*--------------------------------------------------------------------
//LINK IF RC LT 9 THEN
//LINK EXEC PGM=IEWBLINK,REGION=32M,
// PARM='NOXREF'
//SYSLIB DD DSN=CEE.SCEELKED,DISP=SHR
// DD DSN=&SYSUID..T.OBJVA,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSLIN DD DSN=*.PLI.SYSLIN,DISP=(OLD,PASS)
// DD DDNAME=SYSIN
//SYSLMOD DD DSN=&SYSUID..T.LOAD(PLI037A),DISP=SHR
//SYSDEFSD DD DUMMY
//SYSIN DD DUMMY
//LINK ENDIF
Code:
//*--------------------------------------------------------------------
//* COMPILE STEP
//*--------------------------------------------------------------------
//PLI IF RC LT 9 THEN
//PLI EXEC PGM=IBMZPLI,REGION=0M,
// PARM='àDD:OPTIONS,LIST,MAP,OFFSET,NOSTMT'
//STEPLIB DD DSN=IBMZ.SIBMZCMP,DISP=SHR
//OPTIONS DD *
AGGREGATE,ARCH(5),ATTRIBUTES(FULL),BACKREG(11),BIFPREC(15),CMPAT(V2),
DFT(REORDER,BYADDR,RETURNS(BYVALUE),CONN,DESCRIPTOR),FLAG(I),FLOAT(AFP),
EXTRN(SHORT),GONUMBER,INSOURCE,LIMITS(EXTNAME(7),FIXEDDEC(15,31)),
LINECOUNT(48),MACRO,MARGINS(2,72,1),MAXMSG(32767),NEST,NOMARGINI,
NORENT, OPTIONS,OPT(TIME),RULES(IBM),TUNE(5),SOURCE,STMT,XREF(FULL)
/*
//SYSLIB DD DSN=&SYSUID..T.COPY,DISP=SHR
//SYSIN DD DSN=&SYSUID..T.PGMVA(PLI037B),DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSLIN DD DSN=,DISP=(MOD,PASS),UNIT=SYSDA,
// SPACE=(CYL,(1,1)),DCB=(LRECL=80,BLKSIZE=0)
//SYSUT1 DD DSN=,UNIT=SYSDA,
// SPACE=(1024,(200,50),,CONTIG,ROUND),DCB=BLKSIZE=1024
//PLI ENDIF
//*--------------------------------------------------------------------
//* LINK STEP
//*--------------------------------------------------------------------
//LINK IF RC LT 9 THEN
//LINK EXEC PGM=IEWBLINK,REGION=32M,
// PARM='NCAL,LET,NOXREF,DYNAM=DLL'
//SYSLIB DD DSN=CEE.SCEELKED,DISP=SHR
// DD DSN=&SYSUID..T.OBJVA,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSLIN DD DSN=*.PLI.SYSLIN,DISP=(OLD,PASS)
// DD DDNAME=SYSIN
//SYSLMOD DD DSN=&SYSUID..T.OBJVA(PLI037B),DISP=SHR
//SYSDEFSD DD DUMMY
//SYSIN DD DUMMY
//LINK ENDIF
Back to top
waneked New User Joined: 25 Sep 2007Posts: 2 Location: switzerland
Hi robert-ohlen
you must declare for eatch entry (procedure in a package) an external entry in the main program.
dcl push external entry (ptr, char(*), char(*));
dcl view external entry (ptr, char(*), char(*));
Back to top
robert-ohlen New User Joined: 01 Jun 2007Posts: 11 Location: Soiron
Sorry for my response time
I have the same response to LINK.
IEW2456E 9207 SYMBOL PUSH UNRESOLVED. MEMBER COULD NOT BE INCLUDED FROM THE DESIGNATED CALL LIBRARY.
IEW2456E 9207 SYMBOL VIEW UNRESOLVED. MEMBER COULD NOT BE INCLUDED FROM THE DESIGNATED CALL LIBRARY.
Back to top
enrico-sorichetti Superior Member Joined: 14 Mar 2007Posts: 10873 Location: italy
There are always misunderstanding on Autocall feature..
How in heaven is supposed the linkage_editor/binder realize
that push and view are entry points of pli037b ???
You have two alternatives,
1) include explicitly the object with multiple entry points
2) when linking ( but I feel that' useless) the load thing
add tho lked syslin an alias statement for each one of the entry points.
usually by naming tradition an
...obj... contains text format things
...mod... contains load format things
there is no need to link/bind statically called subroutines/packages
Back to top
Please enable JavaScript!