Link-edit步骤究竟是什么

时间:2017-03-29 15:44:04

标签: mainframe

问题

我的COBOL编译器中的链接编辑步骤究竟是做什么的?

编译代码后,执行链接编辑步骤。我不确定这一步是做什么的。

背景资料

刚出校(3年前)我找到了一份大型机应用程序开发人员的工作。我对学校的大型机一无所知,但我的知识存在很多差距。在我的商店周围,我们有一种“黑匣子”的态度,我们不需要知道这些东西是如何运作的,它就是这样。我试图理解为什么我们需要这个链接编辑步骤,如果该程序已经成功编译。

2 个答案:

答案 0 :(得分:8)

linkedit / binderer步骤从编译器(或汇编程序)的输出中生成可执行程序。

如果从COBOL编译步骤查看SYSLIN上的输出数据集(如果它是临时数据集,则可以将其覆盖为FB,LRECL 80顺序数据集以便能够查看它)你会看到“卡片图像”,它包含(在其他一些东西中)编译器生成的机器代码。

这些卡片图片不可执行。代码甚至不是连续的,并且缺少必要的运行时模块等许多东西。

程序装订器/装订器(PGM = HEWL)从编译器/汇编器获取目标代码(卡片图像)并执行所有必要的操作(根据安装的选项,以及您提供的其他选项和其他库)其中许多包含对象代码或加载模块或程序对象)来创建可执行程序。

曾经有一个名为Linkage Editor的东西完成了这项任务。因此,链接,链接。不幸的是,在英语中,bind不会以与编辑相同的方式共轭。没有好词,所以我使用Binderer和Bindered,部分地反对那些决定称之为程序绑定器的企业(不要与Binding for DB2混淆)。

所以,今天,关联人们的意思是“使用程序活页夹”。这是一个将编译/汇编的输出转换为可执行程序的过程,该程序可以是一个加载模块,也可以是一个程序对象(企业COBOL V5 +只能绑定到程序对象,而不是加载模块)或DLL(不是与.dll混淆。

值得一看的是SYSLIN的输出,活页夹步骤的SYSPRINT输出,以及程序活页夹的咨询手册/演示文稿,它将让您了解进展情况,发生的事情(查找)任何IEW消息,特别是对于步骤的非零RC执行),将消息粘贴在浏览器搜索框中。从纪录片材料中,您将开始了解主题的广度。 Binder能够做很多有用的事情。

这是一个有用图表的链接,一些更详细的说明,以及应用程序的活页夹主参考文档的名称:z / OS MVS程序管理:用户指南和参考

The program management binder

作为一个结尾注释,它们是“卡片图像”的原因是因为......在古代,编译器/汇编器的对象卡片会被打到物理卡片上。然后将其用作链接编辑器的输入卡。我很遗憾我错过了必须这样做的事情......

答案 1 :(得分:2)

除了比尔(伟大)的回答之外,我认为值得一提的还有以下相关主题......

静态与动态链接

如果(主)程序'调用'子程序,那么你可以让这种调用发生'动态'或'静态':

  • dynamic:在运行时(执行主程序时),加载并执行子程序的当前内容。
  • static:在链接时(当(重新)链接邮件程序时),子程序的当前内容包含在主程序中(=已解决)。

链接编辑控制卡

加载模块的实际创建(链接编辑步骤的输出)可以通过链接编辑器的特殊指令来控制,例如:

  • 要创建的入口点。
  • 要创建的加载模块的名称。
  • 包括(静态链接的子程序)。
  • 要创建的别名成员。

在PDS或PDSE中存储链接编辑输出

实际输出(加载模块)可以存储在位于PDS或PDSE库中的成员中。在这样做时,您需要提前考虑哪种格式(PDS或PDSE)最符合您的要求,特别是在连接多个库时(例如,用于测试目的的预制环境)。