嵌入式Linux学习笔记(2)-C语言编译过程

news2024/11/18 1:42:02

        c语言的编译分为4个过程,分别是预处理,编译,汇编,链接。

一、预处理

        预处理是c语言编译的第一个阶段,该任务主要由预处理器完成。预处理器会根据预处理指令对源代码进行处理,将预处理指令替换为相应的内容,然后生成编译所需的代码。预处理的主要作用是进行一些常用的文本替换和条件编译,从而提高代码的灵活性和可维护性。

        预处理指令以井号(#)开头,包括宏定义、条件编译和包含文件等。

        预处理的操作如下图所示,分别对main.c 和 hello.c 进行预处理,生成main.i 和 hello.i 文件。

二、编译

        编译是将经过预处理器处理后的代码转换为汇编代码或者目标代码的过程,这个过程主要包括了词法分析、语法分析、语义分析和代码生成等步骤,由编译器完成。

        编译的操作如下图所示,分别对main.i 和 hello.i 进行预处理,生成main.s 和 hello.s 文件。

三、汇编

        汇编是将编译器生成的中间代码或者汇编语言转化为目标代码,即二进制形式。这个过程由汇编器完成。主要任务有:符号解析、指令翻译、地址关联、重定位、代码优化。

        汇编的操作如下图所示,分别对main.s 和 hello.s 进行预处理,生成main.o 和 hello.o 文件。

四、链接

        链接阶段主要是链接器将目标文件以及可能用到的库文件进行链接,生成最终可执行程序。主要有符号解析、符号重定位、代码段和数据段合并等操作。

        链接的方式有三种,静态链接,动态链接和混合链接。

        静态链接是将所有目标文件和所需的所有库一并打包到最终的可执行文件,使其在运行时不需要查找或加载外部库。

        动态链接是在可执行文件包含需要i加载的库的路径与符号信息,在运行的时候才被加载。

        混合链接是将部分函数库以静态链接的方式链接到可执行文件中,而另一部分则以动态链接的方式链接到可执行文件中。

        如下图为静态链接生成的可执行文件 main 与动态链接生成的可执行文件 main1 。可以看出静态链接生成的文件大小远大于动态链接生成的文件,但静态链接的文件的执行速度却大于动态链接的文件

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

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

相关文章

游戏各个知识小点汇总

抗锯齿原理记录 SSAA:把成像的图片放大N倍,然后每N个点进行平均值计算。一般N为2的倍数。比如原始尺寸是1000x1000,长宽各放大2倍变成2000x2000。 举例: 原始尺寸: 放大2倍后 最后平均值计算成像: MSAA&…

基于SpringBoot+Vue的网上蛋糕销售系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…

踩坑记:Poco库,MySql,解析大文本的bug

这两天在调试一个小功能&#xff0c;使用c,读取MySql。使用的是Poco库。按照官网的写法&#xff1a; std::cout << "read normal data by poco recordset "<<std::endl;Poco::Data::MySQL::Connector::registerConnector();Poco::Data::Session session(…

.NET 6.0 + WPF 使用 Prism 框架实现导航

合集 - .NET 基础知识(3) 1..NET 9 优化&#xff0c;抢先体验 C# 13 新特性08-202.《黑神话&#xff1a;悟空》神话再现&#xff0c;虚幻引擎与Unity/C#谁更强&#xff1f;08-21 3..NET 6.0 WPF 使用 Prism 框架实现导航09-11 收起 阅读目录 前言什么是Prism?安装 Prism使…

【卷起来】VUE3.0教程-09-整合Element-plus

最后一次课了&#xff0c;给个关注和赞呗 &#x1f332; 简介 Element Plus 是一个基于 Vue 3 的高质量 UI 组件库。它包含了丰富的组件和扩展功能&#xff0c;例如表格、表单、按钮、导航、通知等&#xff0c;让开发者能够快速构建高质量的 Web 应用。Element Plus 的设计理念…

洛谷 P4683 [IOI2008] Type Printer

原题点这里 题目来源于&#xff1a;洛谷 题目本质&#xff1a;深搜&#xff0c;字典树Trie 当时想法&#xff1a;当时看了题目标签&#xff0c;就有思路了&#xff08;见代码注释&#xff09;&#xff0c;但一直REWA最后只剩下RE。 正确思路&#xff1a; 我们使用字典树来完…

【机器学习】任务四:使用贝叶斯算法识别葡萄酒类别和使用三种不同的决策树方法(ID3,C4.5,CART)对鸢尾花数据进行分类

目录 1.基础知识 1.1 高斯贝叶斯&#xff08;Gaussian Naive Bayes&#xff09; 1.2 决策树&#xff08;Decision Tree&#xff09; 1.3 模型评价&#xff08;Model Evaluation&#xff09; 1.3.1 评价维度&#xff1a; 1.3.2 评价方法&#xff1a; 2.使用贝叶斯算法识别…

android 删除系统原有的debug.keystore,系统运行的时候,重新生成新的debug.keystore,来完成App的运行。

1、先上一个图&#xff1a;这个是keystore无效的原因 之前在安装这个旧版本android studio的时候呢&#xff0c;安装过一版最新的android studio&#xff0c;然后通过模拟器跑过测试的demo。 2、运行旧的项目到模拟器的时候&#xff0c;就报错了&#xff1a; Execution failed…

proteus+51单片机+AD/DA学习5

目录 1.DA转换原理 1.1基本概念 1.1.1DA的简介 1.1.2DA0832芯片 1.1.3PCF8591芯片 1.2代码 1.2.1DAC8053的代码 1.2.2PCF8951的代码 1.3仿真 1.3.1DAC0832的仿真 1.3.2PFC8951的仿真 2.AD转换原理 2.1AD的基本概念 2.1.1AD的简介 2.1.2ADC0809的介绍 2.1.3XPT2…

双指针算法专题(1)

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a; 优选算法专题 目录 双指针算法的介绍 283. 移动零 1089. 复写零 202. 快乐数 11.盛最多水的容器 双指针算法的介绍 在正式做题之前&a…

C++ 获取文件夹下的全部文件及指定文件(代码)

文章目录 1.&#xff08;C17&#xff09;获得指定目录下的所有文件&#xff08;不搜索子文件夹&#xff09;2.&#xff08;C11&#xff09;获得指定目录下的所有文件&#xff08;不搜索子文件夹&#xff09;3.&#xff08;C11&#xff09;获取目录下指定格式的所有文件&#xf…

工厂安灯系统在优化生产流程上的优势

工厂安灯系统通过可视化的方式&#xff0c;帮助工厂管理者和操作工人及时了解生产状态&#xff0c;快速响应问题&#xff0c;从而优化生产流程。 一、安灯系统实时监控与反馈 安灯系统的核心功能是实时监控生产线的状态。通过在生产现场设置灯光、显示屏等设备&#xff0c;工人…

OpenGL(四) 纹理贴图

几何模型&材质&纹理 渲染一个物体需要&#xff1a; 几何模型&#xff1a;决定了物体的形状材质&#xff1a;绝对了当灯光照到上面时的作用效果纹理&#xff1a;决定了物体的外观 纹理对象 纹理有2D的&#xff0c;有3D的。2D图像就是一张图片&#xff0c;3D图像是在…

记得忘记密码情况下如何退出苹果Apple ID

在日常使用苹果手机时&#xff0c;我们可能会遇到需要退出Apple ID的情况&#xff0c;比如更换手机、不再使用某些服务或出于安全考虑等。下面&#xff0c;我们就来详细介绍一下苹果手机如何退出Apple ID。 情况一&#xff1a;记得Apple ID密码 若是记得Apple ID密码&#xff…

3. 轴指令(omron 机器自动化控制器)——>MC_HomeWithParameterMC_Move

机器自动化控制器——第三章 轴指令 3 MC_HomeWithParameter变量▶输入变量▶输出变量 功能说明▶原点复位动作与原点复位参数的关系▶重启运动指令▶多重启动运动指令▶错误代码 MC_Move变量▶输入变量▶输出变量▶输入输出变量 功能说明▶指令详情▶重启运动指令▶多重启动运…

pytorch入门(1)——pytorch加载数据初认识

环境配置及其安装&#xff1a; 2023最新pytorch安装&#xff08;超详细版&#xff09;-CSDN博客 pytorch加载数据初认识 Dataset&#xff1a;创建可被Pytorch使用的数据集 提供一种方式获取数据及其label Dataloader&#xff1a;向模型传递数据 为网络提供不同的数据形式 …

算法_队列+宽度优先搜索---持续更新

文章目录 前言N叉树的层序遍历题目要求题目解析代码如下 二叉树最大宽度题目要求题目解析代码如下 在每个树中找最大值题目要求题目解析代码如下 二叉树的锯齿形层序遍历题目要求题目解析代码如下 前言 本文将会向你介绍有关队列宽度优先搜索的题目&#xff1a;N叉树的层序遍历…

【每日一题】LeetCode 2398.预算内的最多机器人数目(滑动窗口、数组、二分查找、前缀和、堆(优先队列))

【每日一题】LeetCode 2398.预算内的最多机器人数目&#xff08;滑动窗口、数组、二分查找、前缀和、堆&#xff08;优先队列&#xff09;&#xff09; 题目描述 给定两个整数数组 chargeTimes 和 runningCosts&#xff0c;分别代表 n 个机器人的充电时间和运行成本。再给定一…

喂料机和失重秤的区别?

喂料机和失重秤的区别&#xff1f;在硬件结构上的具体差异&#xff1a; 1. 喂料机的硬件结构 喂料机的结构比较简单&#xff0c;主要功能是传送物料&#xff0c;不涉及精确的称重系统。其硬件结构通常包括以下部分&#xff1a; 料斗&#xff1a;用于存储物料&#xff0c;物料…

cesium.js 入门到精通(7)

我们说一下相机的概念&#xff1a; 生活中的相机是一个用来拍照的设备&#xff0c;而这里的相机应该理解成一个人机交互的媒介。地图的缩放、平移、旋转&#xff0c;以及相关的鼠标操作都是由相机作为媒介来实现的。相机的位置和姿态参数决定了我们能看到的地图的样子。 可以…