In the LE Programming Guide, section "Building a simple DLL application" 
(https://www.ibm.com/docs/en/zos/2.4.0?topic=dlls-building-simple-dll-application),
 the following statement is made:

"After final autocall processing of DD SYSLIB is complete, all DLL-type 
references that are not statically resolved are compared to IMPORT control 
statements. Symbols on IMPORT control statements are treated as definitions, 
and cause a matching unresolved symbol to be considered dynamically rather than 
statically resolved. A dynamically resolved symbol causes an entry in the 
binder B_IMPEXP to be created. If the symbol is unresolved at the end of DLL 
processing, it is not accessible at run time."

This means (and I have tested this), if the called routine can be resolved both 
statically and via DLL, it will always choose to bind statically.

For example, ICSF provides both individual program modules for each callable 
service, and also DLLs that provide entry points for each callable service.  
DLL linkage for these routines requires including the appropriate DLL side deck 
(CSFDLL31).  But you also cannot include in your "autocall concatenation" the 
library that contains the individual called routines (in this case 
CSF.SCSFMOD0), otherwise those modules are statically linked, and the DLL 
imports are ignored.  For example, here's an excerpt from the program binder 
step:

//SYSLIN   DD  *
  INCLUDE SIEASID(CSFDLL31)
/*
//         DD  DSN=&&OBJMOD,DISP=(OLD,DELETE)
//         DD  DDNAME=USERLIN
//SYSLIB   DD  DSN=CEE.SCEELKED,DISP=SHR
//         DD  DSN=CEE.SCEELKEX,DISP=SHR
//         DD  DSN=CSF.SCSFMOD0,DISP=SHR
//SIEASID  DD  DSN=SYS1.SIEASID,DISP=SHR

You must not include the CSF.SCSFMOD0 library if you want to use DLL linkage 
for those modules.

In my shop we have all libraries that have modules that any of our programs 
might want to use (rather than having processes to allow for explicitly 
including those libraries only when used).  But if we were to migrate to using 
DLLs (we are a COBOL shop, btw) we'd have to do something so that "DLL 
applications" don't have the "static libraries" in the binder SYSLIB.  This is 
"annoying".  Would I get any support from the community if I were to open an 
RFE and request a binder option to prioritize DLL linkage over static linkage?  
Or better yet, is there already a way to accomplish this?

Frank


----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

Reply via email to