首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >链接器和装载机是什么?它们是如何工作的?

链接器和装载机是什么?它们是如何工作的?
EN

Software Engineering用户
提问于 2011-08-25 11:04:23
回答 3查看 9K关注 0票数 8

我试图更好地理解链接器和装载机之类的东西。

他们属于计算机科学的哪个领域?编译器,操作系统,计算机体系结构?

链接器和装载机在开发过程中起什么作用?

EN

回答 3

Software Engineering用户

发布于 2011-08-25 12:35:32

链接器和加载器是两个相互关联但又相互独立的概念。

链接器是编译器理论的一部分。当您编译一个由多个模块(源代码文件)组成的项目时,编译器通常会为每个源模块输出一个中间文件。这有几个好处,其中之一是,如果您只对一个文件进行更改,然后必须重新编译,则在只进行一个本地更改时,不必重新构建整个项目。

但这意味着,如果在一个模块中有调用不同模块中的函数的代码,编译器就不能为它生成一个CALL指令,因为它没有另一个函数的位置。它位于一个不同的中间文件中,如果您对中介的源文件进行了本地更改并重新编译它,那么函数的确切位置就会发生变化。因此,它插入了一个“外部引用令牌”(确切地说,它是什么或它看起来并不重要,只是把它看作一个抽象的概念),它说:“我需要这个函数,它的确切地址我现在还不知道。”

一旦所有的东西都被编译成中间文件,链接器就是完成工作的工具。它遍历所有中间文件并将它们链接到最后的二进制文件中。因为它将事情组合在一起,所以它知道所有函数的实际地址,因此它可以用实际的CALL指令替换外部引用令牌,以找到二进制文件中正确的位置。

另一方面,加载程序属于操作系统,而不是编译器。它的工作是将二进制文件加载到内存中,以便它能够执行,并完成链接过程,因为链接器只能解析它所知道的代码。如果您的程序正在使用任何DLL,则它们是外部的,即使在编译的二进制文件中也是如此,因此链接器不知道它们的地址。它以OS的加载器所知道的格式将外部引用令牌保留在最终的二进制文件中,然后加载器将这些标记与DLL中的实际函数地址进行匹配,一旦所有内容都加载到内存中。

票数 2
EN

Software Engineering用户

发布于 2011-08-25 12:34:47

为了更多地了解链接器,我认为它们通常会与编译器结合讨论。它们用于将您的各个模块编成一个内聚单元,最后确定该代码中的地址。有些人甚至可能尝试执行优化。

为了了解更多关于加载器的信息,我认为通常会结合编写特定体系结构的编译器来讨论它们,除非您将加载器作为链接器的同义词。我认为加载程序是可执行文件头的一部分,它告诉操作系统如何打开和执行已编译的软件。

我同意阅读维基百科的文章可能会传递比你想要的更多的信息。至于它们的发展方向..。通常,它们超出了项目的控制范围,并且是您选择使用的操作系统和开发包选择的一部分。这是非常罕见的,你会使用(例如) MSVC,但想运行GCC的链接器.可能根本不可能。我唯一使用过非标准链接器的地方是在IBM使用开发副本的时候。

如果你对这些话题有更具体的问题,我想你会找到一个更好的答案。

票数 1
EN

Software Engineering用户

发布于 2011-08-25 12:15:53

计算机基本使用二进制数字。

人们说他们的母语。

编程语言是用于人与计算机之间的交流的。

如果您说:添加2和3,然后从其中减去1,我怀疑计算机是否能理解任何东西(也许在某些编程语言中它会理解)。

所以,你需要把你的源代码转换成计算机能理解的格式,所以你需要一个编译器,它把一种编程语言翻译成共同称为目标代码的语言。但目标代码还不是计算机直接理解和执行的语言。因此,它需要一个链接器,它将生成一个以所谓的机器语言包含指令的可执行文件;机器语言是一组编码成二进制数字的操作,处理器可以理解这些操作。所有二进制指令都有其结构,并由处理器制造商发布。你可以在英特尔的网站上找到它,看看它们是什么样的。

票数 -1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/103673

复制
相关文章
【02】Camunda系列-扩展案例-用户任务、网关、决策自动化
点击刚刚创建的批准付款节点,然后通过扳手设置节点的类型为用户任务(User Task)
用户4919348
2022/09/28
3.2K0
【02】Camunda系列-扩展案例-用户任务、网关、决策自动化
【02】Camunda系列-扩展案例
点击刚刚创建的批准付款节点,然后通过扳手设置节点的类型为用户任务(User Task)
用户4919348
2022/09/28
2.5K0
【02】Camunda系列-扩展案例
Camunda整体架构和相关概念
Camunda BPM 是一个轻量级、开源灵活的工作流框架,它的核心是一个在Java虚拟机内部运行的原生BPMN 2.0流程引擎,因此它可以嵌入到任何Java应用程序或运行时容器中。 下图显示了最重要的组件以及一些典型的用户角色。
共饮一杯无
2022/11/24
2K0
Camunda整体架构和相关概念
流程引擎activiti原理_activiti流程引擎原理
4、springboot2.0整合工作流activiti6.0以及与业务集成时的一些坑
全栈程序员站长
2022/11/01
5K0
流程引擎activiti原理_activiti流程引擎原理
哪个开源工作流引擎更好?Flowable or Camunda ?
  当下在国内大家可以选择的开源的工作流引擎还是比较多的,但是对于具体选择用哪个产品,各自的优缺点有哪些其实并不是太清楚,为此波哥今天专门给大家来整理总结下。
用户4919348
2022/10/28
8.1K1
【第三篇】Camunda系列-整合SpringBoot
  在工作流引擎中流程设计器是一个非常重要的组件,而InterlliJ IDEA是Java程序员用到的最多的编程工具了。前面在基础篇的介绍中我们都在通过Camunda提供的流程设计器绘制好流程图,然后需要单独的拷贝到项目中,要是调整修改不是很方便,这时我们可以在IDEA中和流程设计器绑定起来。这样会更加的灵活。
用户4919348
2022/10/08
11.9K0
【第三篇】Camunda系列-整合SpringBoot
【第六篇】Camunda系列-流程变量
  流程变量可以用将数据添加到流程的运行时状态中,或者更具体地说,变量作用域中。改变实体的各种API可以用来更新这些附加的变量。一般来说,一个变量由一个名称和一个值组成。名称用于在整个流程中识别变量。例如,如果一个活动(activity)设置了一个名为 var 的变量,那么后续活动中可以通过使用这个名称来访问它。变量的值是一个 Java 对象。
用户4919348
2022/10/28
4.2K0
【第六篇】Camunda系列-流程变量
前端JS计算精度损失的问题
https://cdnjs.cloudflare.com/ajax/libs/mathjs/5.0.0/math.min.js
码客说
2022/10/04
2.2K0
TSQL–临时表和表变量
2. 表变量适用于数据较小的情况,表变量只能在定义时创建约束(PRIMARY KEY/UNIQUE)从而间接建立索引
全栈程序员站长
2021/11/29
7610
BPMN和DMN基本概念和使用案例
业务流程模型和表示 (BPMN) 是流程建模的全球标准,也是成功实现业务-IT 协调的最重要组成部分之一。 越来越多的组织正在使用 BPMN,并且越来越多的大学将 BPMN 作为一门学科来教授。原因如下:
共饮一杯无
2022/11/24
2.6K1
BPMN和DMN基本概念和使用案例
TSQL--临时表和表变量
1. 临时表适用数据量较大的情况,因为临时表可以建立索引 2. 表变量适用于数据较小的情况,表变量只能在定义时创建约束(PRIMARY KEY/UNIQUE)从而间接建立索引 3. 临时表是事务性的,数据会随着事务回滚而回滚,表变量是非事务性的 4. 临时表和表变量都存放在内存中,当内存存在压力时才放入到硬盘 5. 临时表属于回话级别,除非显式DROP,否则会一直保持到回话结束 6. 表变量属于上下文级别,当前批处理结束后会被立即释放。 7. 临时表的创建删除会导致存储过程重编译,而在存储过程中使用表变量不
用户1217611
2018/01/30
1.2K0
python for循环带双重变量方法
记录一下今天遇到的问题,想在for循环添加变量,其实通过外部变量也可以做到,这里既然提到for循环了就直接拿来用就可以了
德宏大魔王
2023/08/08
1330
python for循环带双重变量方法
js数字计算精度问题修正
程序计算是一个很普遍的存在,但是语言的计算精度却是一个困扰人的问题,比说说,计算0.1+0.2,0.3+0.6,不用计算机计算,你用口算当然可以计算出分别为0.3和0.9,但是计算机计算的结果却不一样
OECOM
2020/07/01
3.2K0
flowable camunda activiti 功能对比
flowable camunda activiti 三个框架都是从jbpm框架诞生出来的,先是有jbpm4,然后出来了一个activiti5,activiti5发展一段时间,又出来了一个Camunda。activiti5发展了4年,紧接着出来了一个flowable。本文重点对flowable camunda两个框架的功能对比。对比的camunda版本是7.10.0,flowable框架的版本是6.4.1.
全栈程序员站长
2022/08/31
8.3K1
flowable camunda activiti 功能对比
DMN:大脑的默认网络
这篇文章综述由世界著名的脑成像专家Marcus E.Raichle教授撰写,Raichle 教授来自圣路易斯华盛顿大学(Washington University in St Louis),他和他的研究团队在PET及fMRI研究中做出来了巨大的贡献,作为一个脑功能及脑网络研究工作者,非常有必要了解Raichle教授及他的团队所在做的工作:请你猛戳以下链接—https://sites.wustl.edu/nillabs/people/marcus-e-raichle/,认真的了解一下Raichle教授在脑功能及网络研究中所做出的巨大贡献。
用户1279583
2019/07/01
5.8K0
DMN:大脑的默认网络
SQL临时表和表变量 Declare @Tablename Table
大家好,又见面了,我是你们的朋友全栈君。 在SQL Server的性能调优中,有一个不可比面的问题:那就是如何在一段需要长时间的代码或被频繁调用的代码中处理临时数据集?表变量和临时表是两种选择。记得在给一家国内首屈一指的海运公司作SQL Server应用性能评估和调优的时候就看到过大量的临时数据集处理需求,而他们的开发人员就无法确定什么时候用临时表,什么时候用表变量,因此他们就简单的使用了临时表。实际上临时表和表变量都有特定的适用环境。
全栈程序员站长
2022/09/25
1.4K0
springboot生成表结构和表数据sql
业务背景是需要某单机程序需要把正在进行的任务导出,然后另一台电脑上单机继续运行,我这里选择的方案是同步SQL形式,并保证ID随机,多个数据库不会重复。
程序员朱永胜
2023/08/17
2490
springboot生成表结构和表数据sql
camunda「建议收藏」
入门指导:1.https://docs.camunda.org/get-started/quick-start/ 看官网可以快速构建一个可用的工程;
全栈程序员站长
2022/09/19
1.5K0
camunda「建议收藏」
freemarker中的round、floor和ceiling数字的舍入处理
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/119146.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/09
1.6K0
【第四篇】Camunda系列-ProcessEngine核心对象
  ProcessEngine是Camunda流程引擎的核心。我们在流程中的很多具体的处理比如流程部署、流程部署、流程审批等操作都是通过XXXService来处理的。而相关的XXXService都是通过ProcessEngine来管理的。所以对于ProcessEngine的创建方式还是很有必要掌握的。
用户4919348
2022/10/27
3.3K0
【第四篇】Camunda系列-ProcessEngine核心对象

相似问题

使用Java Camunda Springboot启动程序创建多个DMN

15

如何基于DMN规则执行Camunda BPMN工作流

112

如何在运行时更新camunda dmn表?

143

评估Camunda DMN决策时的异常

28

如何在DMN camunda中验证多个规则输入

142
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文