编译+链接

news2024/11/24 11:46:20

文章目录

  • 编译
    • 预编译(预处理)
    • 编译
    • 汇编
  • 链接

我们写完一个程序要经过 编译链接过程才能形成 可执行程序,那么编译和链接的具体过程究竟是什么呢?
首先,当我们写完一个工程后可能会有很多文件,这些文件会先 单独经过 编译器的处理形成 目标文件,在vs中,后缀为.obj的文件就是目标文件;Linux中,后缀为.o的文件就是目标文件
在这里插入图片描述
在这里插入图片描述
之后 所有的目标文件和链接库一起经过链接器的处理形成可执行文件,这里的链接库和目标文件一样 都是二进制文件,链接库 就是别人写好的,开源的库文件经过编译,打包好的二进制文件,但是这些链接库无法独立的运行,必须经过其他程序的调用才会被载入内存。这里所说的 编译器和链接器都是可执行文件,都是可以在我们的电脑中搜索到的
在这里插入图片描述
在这里插入图片描述
因为VS2019是集成开发环境,这些具体的步骤不是那么容易观察,我们这里选择 Linux操作系统中的gcc编译器来观察一下它们的具体过程
首先我们要知道,整个翻译环境分为编译和链接两个过程,而编译又可以分为 预编译(也叫预处理), 编译汇编三个过程

编译

预编译(预处理)

首先我们通过命令让.c文件预编译一下
在这里插入图片描述
执行完后,就会形成一个test.i 的文件,
我们先来看一下之前.c 文件中有什么内容
在这里插入图片描述
我们再看一下预处理后.i文件中有什么内容
在这里插入图片描述
其实上边还有很多的内容,对比这两张图片,我们可以看到,预编译过程会进行头文件展开,去掉注释,宏替换等一些文本性的操作
以及所有的预处理指令都是在预处理阶段处理的
在这里插入图片描述

编译

下面我们来看一下编译过程都进行了什么,我们还是通过命令先形成一下这个文件
在这里插入图片描述
它就会形成file.s这个文件,我们可以打开这个文件
在这里插入图片描述
我们可以看到都是一些汇编代码,也就是说,编译过程将C语言代码生成了汇编指令

汇编

接下来就是汇编这个过程,指令是
在这里插入图片描述
这里的目标文件我们上边说过是二进制文件,我们直接打开肯定是乱码,但是在Linux下gcc编译的目标文件和可执行文件都是按照ELF这种文件的格式来存储的,我们想打开的话也可以
在这里插入图片描述
可以看到右下角是我们认识的一些符号,所以汇编过程也会形成符号表

链接

编译过程完成之后,就到了链接过程
在这里插入图片描述
这里的file就是我们的可执行文件
所以在链接这个过程,经历了符号表的合并和重定位以及合并段表,因为前边我们可以看到,代码都是分成段去存储
在这里插入图片描述
有这些不同的种类
那么到这里,一个非常简单的从一个C语言文件到可执行文件的过程就说清楚了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1400645.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

反欺诈与异常点检测

1. 反欺诈检检测 1.1 反欺诈检测的难点 反诈骗实际是个多分类问题,每种不同的诈骗都当做一种单独的类型。除了欺诈手段多样且持续变化,欺诈检测一般还面临以下问题: 1. 大部分情况下数据是没有标签的,各种成熟的监督学习没有用武…

基于深度学习的细胞感染性识别与判定

基于深度学习的细胞感染性识别与判定 基于深度学习的细胞感染性识别与判定引言项目背景项目意义项目实施数据采集与预处理模型选择与训练模型评估与优化 结果与展望结论 基于深度学习的细胞感染性识别与判定 引言 随着深度学习技术的不断发展,其在医学图像处理领域…

【操作系统和计网从入门到深入】(四)基础IO和文件系统

前言 这个专栏其实是博主在复习操作系统和计算机网络时候的笔记,所以如果是博主比较熟悉的知识点,博主可能就直接跳过了,但是所有重要的知识点,在这个专栏里面都会提到!而且我也一定会保证这个专栏知识点的完整性&…

【网站项目】基于jsp的199旅游景点管理系统

🙊作者简介:多年一线开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

最安全的飞行器——飞行汽车

飞行汽车采用旋翼机飞行方式,稳定可靠,保证人身安全,可以垂直起降。旋翼机的稳定性在所有航空器中最高的,旋翼机被国际航空界公认为最安全的飞行器!增程器采用斯特林发电机。飞行汽车3D。 固定翼飞机在起飞的时候&…

二叉树 - 堆 | 数据结构中的小技巧大作用

📷 江池俊: 个人主页 🔥个人专栏: ✅数据结构冒险记 ✅C语言进阶之路 🌅 有航道的人,再渺小也不会迷途。 文章目录 一、堆的概念及介绍二、结构图示三、堆的代码实现(图解)3.1 创…

【RT-DETR有效改进】华为 | GhostnetV2移动端的特征提取网络效果完爆MobileNet系列

前言 大家好,这里是RT-DETR有效涨点专栏。 本专栏的内容为根据ultralytics版本的RT-DETR进行改进,内容持续更新,每周更新文章数量3-10篇。 专栏以ResNet18、ResNet50为基础修改版本,同时修改内容也支持ResNet32、ResNet101和PP…

【RT-DETR有效改进】Google | EfficientNetV1一种超轻量又高效的网络 (附代码 + 添加教程)

前言 大家好,我是Snu77,这里是RT-DETR有效涨点专栏。 本专栏的内容为根据ultralytics版本的RT-DETR进行改进,内容持续更新,每周更新文章数量3-10篇。 专栏以ResNet18、ResNet50为基础修改版本,同时修改内容也支持Re…

2024首更---Web Service 教程

Web Services 简介 Web Services 可使您的应用程序成为 Web 应用程序。 Web Services 通过 Web 进行发布、查找和使用。 您应当具备的基础知识 在继续学习之前,您需要对下面的知识有基本的了解: HTMLXML 如果您希望首先学习这些项目,请在…

蓝桥杯-dfs(一)

📑前言 本文主要是【算法】——dfs使用的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 🌄每日一句&#xff1…

RLC如何通过改变频率实现输出稳压

当开关频率工作在容性区域时,容抗抵消完感抗还有剩余,所以容抗感抗可以近似为一个容抗Cr,但加上频率的改变,容抗又可以近似为一个可调电阻 那又改如何控制频率,保持输出稳压? 当输入与输出电压不变时,Rac变…

Oracle 经典练习题 50 题

文章目录 一 CreateTable二 练习题1 查询"01"课程比"02"课程成绩高的学生的信息及课程分数2 查询"01"课程比"02"课程成绩低的学生的信息及课程分数3 查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩4 查询平均成绩小于…

[小程序]API、数据与事件

一、API ①事件监听API 以on开头,用来监听事件的触发(如wx.inWindowResize) ②同步API 以Sync结尾,且可以通过函数返回值获取,执行错误会抛出异常(如wx.setStorageSync) ③异步API 类似网页中的…

yum下载源,vim使用

文章目录 yum本地配置lzrsz命令行互传scp(远程拷贝)vim yum本地配置 [rootiZf8z3j2ckkap6ypn717msZ ~]# pwd /root [rootiZf8z3j2ckkap6ypn717msZ ~]# ls /etc/yum.repos.d CentOS-Base.repo epel.repo //本地配置源yum会根据/etc/yum.repo.d路径下的配置文件来构成自己的下载…

pip安装之后还是无法使用问题处理

最近由于需要使用到Python 相关功能, 记录下一些入门小技巧 1 python 下载安装 在window10 环境下载免安装版本, 并解压 安装包下载地址: https://www.python.org/ftp/python/3.12.1/python-3.12.1-embed-amd64.zip 2. 安装pip, 由于是内嵌…

基于无锁循环队列的线程池的实现

目录 出处:B站码出名企路 应用场景 设计实现 等待策略模块 晚绑定 C 中的 override关键字 C中的 default 关键字 C中的 delete 关键字 C中的 explicit 关键字 C中 using 别名技巧 sleep 和 yield的区别 noexcept关键字 volatile关键字 无锁循环队列的…

【计算机网络】TCP握手与挥手:三步奏和四步曲

这里写目录标题 前言三次握手四次挥手三次握手和四次挥手的作用TCP三次握手的作用建立连接防止已失效的连接请求建立连接防止重复连接 TCP四次挥手的作用:安全关闭连接避免数据丢失避免半开连接 总结: 总结 前言 TCP(传输控制协议&#xff09…

《游戏-02_2D-开发》

基于《游戏-01_2D-开发》, 继续制作游戏: 首先给人物添加一个2D重力效果 在编辑的项目设置中, 可以看出unity默认给的2D重力数值是-9.81,模拟现实社会中的重力效果 下方可以设置帧率 而Gravity Scale代表 这个数值会 * 重力 还…

MySQL---多表等级查询综合练习

创建emp表 CREATE TABLE emp( empno INT(4) NOT NULL COMMENT 员工编号, ename VARCHAR(10) COMMENT 员工名字, job VARCHAR(10) COMMENT 职位, mgr INT(4) COMMENT 上司, hiredate DATE COMMENT 入职时间, sal INT(7) COMMENT 基本工资, comm INT(7) COMMENT 补贴, deptno INT…

【cucumber】cluecumber-report-plugin生成测试报告

cluecumber为生成测试报告的第三方插件&#xff0c;可以生成html测报&#xff0c;该测报生成需以本地json测报的生成为基础。 所以需要在测试开始主文件标签CucumberOptions中&#xff0c;写入生成json报告。 2. pom xml文件中加入插件 <!-- 根据 cucumber json文件 美化测…