没有合适的资源?快使用搜索试试~ 我知道了~
预处理器,编译器,汇编器和链接器,一起构成了编译系统
需积分: 0 1 下载量 70 浏览量
2024-01-10
09:48:11
上传
评论
收藏 12KB DOCX 举报
温馨提示
试读
2页
helloworld.c程序是从一个高级C程序开始的,为了在系统上运行此程序,每条C语言都必须被其他程序转化为一系列的低级机器语言指令,然后这些指令按照一种称为可执行目标程序的格式打包,并以二进制磁盘文件的形式存放起来。 编译器读取源程序文件helloworld.c,并把它翻译成一个可执行文件helloworld,这个翻译过程可分为四个阶段完成。执行这四个阶段的程序:预处理器,编译器,汇编器和链接器,一起构成了编译系统。
资源推荐
资源详情
资源评论
一,简单编译原理
从最简单的一个程序 helloworld.c 程序说起,它的生命周期是从一个源程序开始的,即通过
编辑器创建并保存的文本文件。源程序实际上就是一个由 0 和 1 组成的位序列,8 个位被组
织成一组称为字节,每个字节表示程序中的某些文本字符。
helloworld.c 的表示方法说明了一个基本思想:系统中所有的信息---包括磁盘文件,内存中
的程序,内存中存放的用户数据以及网络上传送的数据,都是由一串位序列(比特)表示的
。
1. 编译过程
helloworld.c 程序是从一个高级 C 程序开始的,为了在系统上运行此程序,每条 C 语言都必
须被其他程序转化为一系列的低级机器语言指令,然后这些指令按照一种称为可执行目标程
序的格式打包,并以二进制磁盘文件的形式存放起来。
编译器读取源程序文件 helloworld.c,并把它翻译成一个可执行文件 helloworld,这个翻译过
程可分为四个阶段完成。执行这四个阶段的程序:预处理器,编译器,汇编器和链接器,一
起构成了编译系统。
2.预处理阶段
预处理器根据以字符#开头的命令,修改原始的 C 程序,比如#include<stdio.h>命令告诉预处
理器读取系统头文件 stdio.h 的内容,并把它直接插入程序文本中,结果就得到了另一个 C
程序,通常是以.i 作为文件扩展名。
gcc -E helloworld.c -o helloworld.i
-E 选项告诉编译器只进行预处理操作
-o 选项把预处理的结果输出到指定文件
3.编译阶段
编译器将文本 helloworld.i 翻译成文本文件 helloworld.s,它包含一个汇编语言程序。该程序包
含函数 main 的定义,每条语句都以一种文本格式描述了一条低级机器语言指令。汇编语言
非常有用,它为不同高级语言的不同编译器提供了通用的输出语言。
gcc -S helloworld.c -o helloworld.s
-S 选项告诉编译器,进行预处理和编译成汇编语言操作
4.汇编阶段
汇编器将 helloworld.s 翻译成机器语言指令,把这些指令打包成一种可重定位目标程序的格
式,并将结果保存在目标文件 helloworld.o 中。helloworld.o 文件是一个二进制文件,它包含
的 17 个字节是函数 main 的指令编码,如果打开 helloworld.o 文件,将看到乱码。
gcc -c helloworld.c -o helloworld.o
5.链接阶段
将.o 文件和库文件链接成为可被操作系统执行的可执行程序,例如 helloworld 程序调用了
printf 函数,它是每个 C 编译器都提供的标准 C 库中的一个函数,printf 函数存在于一个名
为 printf.o 的单独的预编译好的目标文件中,而这个文件必须以某种方式合并到我们的
helloworld.o 程序中。链接器就负责处理这种合并,结果就得到 helloworld 文件,它是一个
可执行目标文件,可以被加载到内存中,由系统执行。
资源评论
david_liufei
- 粉丝: 27
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功