博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编译与链接的简单过程小结
阅读量:5115 次
发布时间:2019-06-13

本文共 1001 字,大约阅读时间需要 3 分钟。

一些集成IDE隐藏了处理的细节,其实一个程序的编译大体上可以分为如下几个步骤:
预处理->编译->汇编->链接
预处理:产生.i文件
gcc -E hello.c -o hello.i
cpp hello.c > hello.i
1。展开所有的
定义
2。处理所有的
条件编译指令
3。处理
#include指令,将文件包含进去
4。删除所有的
注释
5。添加
行号和文件标识
6。保留所有的#pragma编译器指令,编译器需要使用到
编译:
gcc -S hello.i -o hello.s
进行
词法分析、语法分析、语义分析以及优化后生成汇编代码
可以把预处理和编译合并,使用cc1的程序完成这一步骤
/usr/lib/gcc/i486-linux-gnu/4.1/cc1 hello.c
gcc命令可以说是一大堆后台程序的包装,根据不同参数调用相应的程序
汇编:
gcc -c hello.c -o hello.o
将汇编代码转为机器可以执行的指令,
直接翻译即可,可以使用汇编器as
as hello.s -o hello.o
链接:
将所有文件拼接在一起
编译的过程
1.词法分析:
将源代码输入到扫描器,运用
有限状态机将字符序列分割为一系列的
记号,包括关键字、标识符、字面量和特殊符号,同时生产符号表和文字表等
2.语法分析
对记号使用
上下文无关文法分析进而产生
语法树,语法树就是以表达式为节点的树。
3.语义分析
编译器分析的其实是静态语义,包括申明和类型的匹配、类型的转换,将语法树的
每一个表达式节点全部标上了类型
4.中间语言生成
源代码优化器将语法树转为
中间代码,是语法树的顺序表示,中间代码可以是
三地址码。同时,中间代码将编译器分为前端和后端,前端负责生成机器无关的中间代码,后端负责将中间代码转为目标机器代码。
5.目标代码生成与优化
属于
编译器的后端,包括代码生成器和目标代码优化器,代码生成器将中间代码转为目标机器代码,这一过程依赖于目标机器,目标代码优化器对代码进行优化。
静态链接: 
将源代码模块分别编译之后,需要将它们组装起来,组装模块的过程就是链接。与早期程序猿手工调整地址本质上没有区别。链接过程主要包括
地址和空间分配、符号决议、重定位。

 

转载于:https://www.cnblogs.com/pangblog/p/3424197.html

你可能感兴趣的文章
springboot No Identifier specified for entity的解决办法
查看>>
慵懒中长大的人,只会挨生活留下的耳光
查看>>
"远程桌面连接--“发生身份验证错误。要求的函数不受支持
查看>>
【BZOJ1565】 植物大战僵尸
查看>>
VALSE2019总结(4)-主题报告
查看>>
浅谈 unix, linux, ios, android 区别和联系
查看>>
51nod 1428 活动安排问题 (贪心+优先队列)
查看>>
中国烧鹅系列:利用烧鹅自动执行SD卡上的自定义程序(含视频)
查看>>
Solaris11修改主机名
查看>>
latex for wordpress(一)
查看>>
如何在maven工程中加载oracle驱动
查看>>
Flask 系列之 SQLAlchemy
查看>>
aboutMe
查看>>
【Debug】IAR在线调试时报错,Warning: Stack pointer is setup to incorrect alignmentStack,芯片使用STM32F103ZET6...
查看>>
一句话说清分布式锁,进程锁,线程锁
查看>>
python常用函数
查看>>
FastDFS使用
查看>>
服务器解析请求的基本原理
查看>>
[HDU3683 Gomoku]
查看>>
【工具相关】iOS-Reveal的使用
查看>>