Hi Barry,

Interesting.  But I can't quite get it to work.  What's bizarre is that the DLL 
linkage seems to get resolved:

IMPORT/EXPORT     TYPE    SYMBOL              DLL                 DDNAME   SEQ  
MEMBER    
-------------     ------  ----------------    ----------------    -------- ---  
--------- 
   IMPORT         CODE    CSNBRNGL            CSFDLL31            SIEASID   01  
CSFDLL31  

But the binder is still giving me an error:

IEW2455W 9205 SYMBOL CSNBRNGL UNRESOLVED.  NOCALL OR NEVERCALL SPECIFIED.       
                                    
IEW2638S 5384 AN EXECUTABLE VERSION OF MODULE *NULL* EXISTS AND CANNOT BE 
REPLACED BY THE NON-EXECUTABLE MODULE JUST
         CREATED.                                                               
                                    

Very odd!

Frank

On Tue, 10 Aug 2021 13:40:10 -0500, Barry Lichtenstein <[email protected]> 
wrote:

>This complaint has come up every so often.  There is something already in the 
>binder that works.  However it requires a control statements one-for-one with 
>each IMPORT statement.  The control statement is a restricted no-call LIBRARY 
>statement, it looks simply like this (with the parentheses):
>
>  LIBRARY (symname)
>
>That tells the binder to not resolve symbol 'symname' from an autocall 
>library.  You can still explicitly include it, or the symbol could come in 
>statically due to being part of another module.  The binder will still always 
>resolve statically first  -- or more accurately it will only attempt to 
>"resolve dynamically" symbols that are unresolved after final autocall.  (It's 
>a bit of a misnomer, the binder is only promised that the symbol will be there 
>when LE tries to find it, so the binder dutifully builds the construct for LE 
>to do so.)
>
>I'd suggest having this statement at the top of a file of control statements, 
>to avoid having to quote all the symbol names:
>
> SETOPT PARM(CASE=MIXED) * Avoid quoting symbol names on LIBRARY
>
>Barry
>
>On Mon, 9 Aug 2021 23:36:37 +0000 Frank Swarbrick 
><[email protected]> wrote:
>> Reply
>>
>> 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. Sy
>mbols 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 lin
>kage 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=&&amp;amp;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 tho
>se 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 t
>he "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 t
>o 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 [email protected] with the message: INFO IBM-MAIN

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN

Reply via email to