位置: 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)

  • 金银首饰以旧换新增值税
  • 税盘维护费抵扣
  • 企业赠送礼品是否涉税
  • 收到补价时应确认收益,支付补价时不能确认收益
  • 应收账款和长期应收款区别
  • 包工包料和包清工
  • 税局代开专票如何做账务处理?
  • 诉讼费走哪个会计科目
  • 受托方的计税价格是什么意思
  • 银行贷款利息支出汇算清缴需要调整吗
  • 分配利润和分配股利
  • 企业出租自有厂房超经营吗
  • 事业单位去年的年假今年可以休吗
  • 2016年的发票可以用到什么时候
  • 写支票人民币大写有角需要写整吗
  • 天猫店不开发票会被扣多少分
  • 销售方销售折让的会计处理
  • 贸易公司收到货款会计分录
  • 进口车关税怎么抵扣
  • 大宗物资吧
  • 出口企业进项税额转出怎么理解
  • 员工赔偿款需要交个税么
  • 差旅费进项可以跨月抵扣吗
  • 投资收益企业所得税预缴
  • mac电脑安装win10系统报错
  • 抖音自动抢福袋挂机软件哪个好
  • 未知格式或损坏文件怎么办
  • KB5004296无法安装,提示错误代码:0x800f0990的解决方法
  • vue打包速度优化
  • 代驾服务费如何计算
  • 民营非盈利机构
  • 预算周转金会计怎么做账
  • 莱辛巴赫瀑布在瑞士哪里
  • 房地产开发间接费
  • 期初未缴税额有数字怎么处理
  • 以前年度损益调整
  • k8s kubelet
  • opencv官方教程
  • 兼职员工的工资怎么发放
  • 应计入财务费用的科目是
  • 现金支付的现状
  • dedecms安装及配置
  • 图文详解管道支架制作安装标准
  • 经营租入的设备属于什么会计要素
  • 工程产值是怎么算的
  • sqlserver常用命令
  • 一般纳税人的商业保险可以开票吗
  • 年末结转步骤
  • 收回发票会计分录
  • 固定资产台账具体做什么
  • 其他业务收入的附加税的会计分录
  • 小规模没交税有什么后果
  • 交通补贴属于工资薪金所得吗
  • 汇兑损益分录如何写
  • 法院主要业务活动
  • 集团管理费收入是否纳税
  • 年终结账的会计分录
  • 稳岗补贴会计分录怎么做,需要缴纳企业所得税不
  • mysql5.7安装教程详细
  • 通过zeno实现加速屏幕显示操作教程
  • pc端直通车的位置有些?
  • windows10的改进
  • Windows 2003作中转VPN服务器多路由共享上网的方法
  • win10临时文件设置
  • 将哪一linux文件系统引入
  • windows10周年更新
  • centos7搜索
  • window8设置在哪里
  • shell程序中定义的函数能不能有参数
  • 网页设计中的几种齐方式及其特点
  • js的自定义属性
  • jquery.siblings()
  • 国家税务总局票据丢失罚款标准
  • 附加税申报表样本
  • 国家税务总局,河北省税务局
  • 如何连续打印单据
  • 企业筹建期间发生的费用应计入什么账户
  • 财税[2020]25号
  • 法制观念的问题
  • 美国税务人员
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设