位置: IT常识 - 正文

静态链接(linux 静态链接)

编辑:rootadmin
前言 ​对于我们平时写代码运行,我们很少去关注编译和链接的过程,因为现在的开发环境都是集成(IDE)的,这些IDE一般都会将编译和链接的过程一步搞定,这一过程又被称为构建。但若经常写代码,经常会有很多莫名其妙的错误让我们不知所措,对于这些错误若我们能知其原因,那是再好不过了。因此本系列就是带你了解 ... 前言

推荐整理分享静态链接(linux 静态链接),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:linux 静态链接,静态链接时需要解决两个什么问题,静态链接和动态链接的区别,静态链接是在什么时候进行的,静态链接库和动态链接库的区别,静态链接是在()进行的;而动态链接是在()或()进行的,静态链接库和动态链接库的区别,静态链接和动态链接的区别,内容如对您有帮助,希望把文章链接给更多的朋友!

​对于我们平时写代码运行,我们很少去关注编译和链接的过程,因为现在的开发环境都是集成(IDE)的,这些IDE一般都会将编译和链接的过程一步搞定,这一过程又被称为构建。但若经常写代码,经常会有很多莫名其妙的错误让我们不知所措,对于这些错误若我们能知其原因,那是再好不过了。因此本系列就是带你了解这些编译器和链接器在背后的工作

梦开始的地方

​让我们先来看一个最最最经典的例子

//hello.c#include <stdio.h>int main(){ printf("hello world"); return 0;}

​事实上,运行以上过程,可以被分解为四步:预处理、编译、汇编、链接

预编译

​预处理器在预编译阶段会将源代码文件.c和相关的头文件编译为一个.i文件,其中主要处理“#”开头的预编译指令

静态链接(linux 静态链接)

​预编译过程主要处理规则:

删除所有注释 "//" 和 "/**/"处理所有条件预编译指令 "#if"、"#ifdef"等删除所有 "#define",且展开所有宏定义处理预编译指令"#include",将被包含的文件插入到相应的预编译指令位置。当然可能插入的文件还包含其他文件添加行号和文件名标识,以便于编译器在编译时产生调试所用的行号信息和产生编译错误或警告时可以显示行号保留所有#pragma指令,便于编译器使用编译

​所谓编译,就是将上一个预处理阶段处理完的文件进行词法分析、语法分析、语义分析和优化后生成的汇编代码文件。其过程最为关键且复杂。但是现在版本的GCC已经把预编译和编译合并为一个步骤,使用cc1来完成

​现有如下片段:

array[index] = (index + 4) * ( 2 + 6 )词法分析

​首先,源代码程序被输入到扫描器,运用类似有限状态机的算法将源代码的字符序列分割为一系列记号(token)

记号类型array标识符[左方括号index标识符]右方括号=赋值(左圆括号index标识符+加号4数字)右圆括号*乘号(左圆括号2数字+加号6数字)右圆括号词法分析的记号可分为:关键字、标识符、字面量(数字、字符串等)、特殊符号(加号等)识别记号时,扫描器也会将标识符放入符号表,将字面量常量放入文字表,以备往后的步骤使用语法分析

​接下来时语法分析。语法分析器对扫描器产生的记号进行语法分析,再产生语法树,语法树时以表达式为节点的树。语法分析过程会采用上下文无关语法

语法分析过程,会确定运算符号的优先级和含义。此时若出现表达式不合法,编译器则会报告语法分析阶段的错误语义分析

​语法分析会对完成了表达式的语法层面的分析,但其并不知道这个语句是否有意义,因此需要语义分析器进行语义分析,从而对整个语法树的表达式标识类型;若有类型需要做隐式转换,会在语法树中插入相应的转换节点

​语义分析分为两类,静态语义是编译器再编译器可以确定的语义;动态语义则是在运行期才能确定的语义

静态语义包括
本文链接地址:https://www.jiuchutong.com/zhishi/303788.html 转载请保留说明!

上一篇:JavaScript数据类型BigInt实践之id数值太大,导致前后端交互异常(javascript数据类型分为哪两类)

下一篇:python 如何调用api(python 如何调用c)

  • 研发费用加计扣除是什么意思啊
  • 个体工商户需要交税吗?怎么交?
  • 为什么要计提递延所得税
  • 建筑业差额纳税怎么算
  • 城建税可以不交吗
  • 增值税销项抵扣报税后有效期是多长时间
  • 个税超过部分征税还是全部
  • 会议服务费怎么开
  • 固定资产加速折旧税收优惠政策
  • 企业清算过程中应收应付的处置
  • 折旧已经计提完的固定资产如何盘点
  • 没收不还
  • 有留抵增值税怎么做账
  • 加油费充值卡发票可以报销吗
  • 固定资产预计净残值最后怎么处理
  • 商务旅行人身意外伤害险在税前扣除范围内吗?
  • 后续支出均应计入当期损益
  • 增值税发票二联折叠票样式
  • 高新企业产品开发的折旧费用可以税前扣除吗?
  • 购买办公用品未取得发票怎么办
  • 电子发票会计怎么记账
  • 劳务公司差额征收税率是多少
  • 公司没有发票的做内账,那么支付款从哪里来
  • macbook右上角
  • 个体户生产经营所得怎么报税
  • 季报根据什么申报
  • 增值税专用发票丢了怎么补救
  • 使用的磁盘空间在哪
  • Windows 11 Build 22000.176 (KB5006050) 更新推送(附更新内容+安装)
  • 发放职工工资计入什么会计科目
  • 新产品研发费的会计分录
  • php实现微信发红包的方法
  • 生产企业 制造商
  • 期间费用计算公式
  • thinkphp框架怎么用
  • 蓝色向日葵
  • 期末余额跟年初余额是什么意思
  • 微信小程序详细教程
  • ai 绘画原理
  • 瑞吉接送
  • html5/css3
  • 一文速学-XGBoost模型算法原理以及实现+Python项目实战
  • 数据模型 excel
  • python安装后找不到了
  • 捐赠利得的会计科目
  • 工商银行代发工资多久到账
  • 企业的应交税金一般通过什么科目核算
  • 金蝶软件资产负债表公式设置
  • 收入少收钱账务处理
  • 金蝶k3明细账如何查询
  • 企业付给个人工资怎么算
  • 公司股东投资在哪里查
  • 出纳收到发票后给会计吗合法吗
  • 增值税要计入应收账款吗
  • 小规模企业购入原材料会计分录
  • 会计凭证销毁年限
  • 收到的稳岗补贴是否需要交税
  • 少计提的税费如何补提
  • 代销手续费怎么做账
  • 银行日记账上月的余额要结转吗
  • 从公司账户转给他人私户1万元以内需要扣多钱的税
  • 不得从销项税额中抵扣进项税的有哪些
  • 如何使用组策略脚本
  • ubuntu zed
  • windows media player找不到媒体流
  • win10一年更新几次
  • node linux安装
  • cocos2dx环境搭建
  • linux有两个ip
  • unity预处理命令
  • angularjs常用总结
  • jquery分页插件的使用
  • 简述activity的生命周期中有哪几种状态
  • js类的定义方法
  • 深圳市税务局发短信是真的吗
  • 供给决定需求,需求影响供给
  • 政府免费
  • 浙江增值税发票勾选认证流程
  • 开展培训举办培训
  • 消费税税目税率表2019
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设