如何判断模块是动态还是静态?
答案 0 :(得分:1)
如果您在z / OS上运行,您可以完成此任务,但这并非易事。
首先,您必须跟踪保存区域链并使用CSVQUERY找出每个保存区域拥有的程序。每个其他程序都是Cobol运行时模块,如IGZCPAC。在IMS,CICS,TSO等下,这些模块可能不同。这很容易。
一旦您知道谁拥有所有相关的保存区域,您就可以使用OS LOADER / BINDER / LINKER实用程序来发现相同模块中的工件。这是不容易的部分。
答案 1 :(得分:0)
唯一的方法是查看链接编辑器(IEWL)或加载模块本身的输出。如果模块被动态调用,那么它将不存在于主模块中,如果它被称为STATICALLY,那么它将在加载模块中看到。调用包含程序名称的工作存储变量不会进行DYNAMIC调用。这种类型的调用称为IMPLICITE调用,因为工作存储变量的内容隐含了模块的名称。调用程序名称文字。
答案 2 :(得分:0)
调用工作存储变量, 包含程序名称,不包含 做一个动态的电话。
是的。调用variablename是始终 DYNAMIC。 根据DYNAM / NODYNAM编译器选项,调用'literal'是动态的或静态的。
警告:这适用于IBM大型机COBOL,我相信它也是标准的一部分。它可能不适用于其他非标准版本的COBOL。
答案 3 :(得分:0)
对于Micro Focus,COBOL静态链接通过调用(第3位)或编译器指令call-convention通过LITLINK进行控制。
静态链接时,程序ID /入口点的情况和调用本身很重要,因此您可能希望确保它是准确的并使用CASE指令。
LITLINK指令的反向是NOLITLINK指令或没有第3位设置的调用约定!
在Windows上,您可以使用“dumpbin / exports”实用程序在Unix中查看导出的符号,在Unix上通过“nm”实用程序查看。
可以使用cbllink上的'-K'命令行选项创建通过“cbllink”创建的.dll的导入.lib。
答案 4 :(得分:0)
查看调用语句。如果在文字中描述被调用的程序,则它是静态调用。如果在运行时确定被调用的程序,则称为动态调用:
* Static call
call "THEPROGRAM"
* Dynamic call
call wsProgramName