编译和链接说明
来源:互联网 发布:淘宝网良品铺子 编辑:程序博客网 时间:2024/04/29 07:41
编译器的工作不单单只有编译,事实上,它包括了从高级语言到机器语言的完整过程:
预编译-》编译-》汇编-》链接。
- 预编译
预编译过程主要是处理源代码文件中以#开始的预编译指令。主要处理规则如下:
1.1.将所有#define删除,并展开所有的宏定义。
1.2.处理所有条件编译指令,比如#ifdef、#else等。
1.3.处理#include,递归的将被包含的文件出入到该指令的位置。
1.4.删除所有注释。
1.5.添加行号和文件名标识,以便于编译器调试产生的行号消息和警告时显示的行号。
1.6.保留所有#pragma编译指令。#pragma指令是编译器参数。经过预编译之后,产生一个*.i文件。 - 编译
编译过程就是把预处理完成的*.i文件进行词法分析、语法分析、语义分析以及优化之后,产生相应的汇编代码文件。
2.1.词法分析利用扫描器和有限状态机算法,将源代码字符按照特定的字符标识分割成一系列记号。这些记号包含了以下几种分类:关键字、标识符、字面量(包括数字、字符串等)和特殊符号(加减乘除等)。
2.2.语法分析产生表达式语法树,但是不排查这个语句是否合法。
2.3.语义分析给语法树添加类型标识,并检查表达式是否合法。
2.4.中间代码生成。
2.5.目标代码生成和优化经过编译之后,产生一个汇编输出文件*.s文件。 - 汇编
汇编过程就是将汇编代码转变成机器代码文件*.o文件。这是个相对简单的过程,根据汇编指令和机器指令对照一一翻译就可以了。 - 链接
连接器将多个*.o文件彼此关联拼接到一起,最终产生一个可执行文件。分为静态链接和动态链接。
- 编译和链接说明
- FFMPEG官方编译说明链接
- 编译和链接
- c++编译和链接
- 关于编译和链接
- 编译和链接
- 编译和链接
- 编译和链接
- 编译和链接
- 编译、链接和构建:
- g++ 编译和链接
- 编译链接和加载
- g++ 编译和链接
- 程序编译和链接
- 编译 链接和加载
- g++ 编译和链接
- 编译 链接和加载
- 编译 链接和加载
- 终于出等值线图了,好辛苦啊
- 程序开发点滴
- JS正则表达式大全
- hdu 2809 临时保存
- OEM11g完全卸载
- 编译和链接说明
- HTML简介和基本标签
- strstr
- ooad面向对象的分析和设计
- JavaScript编程风格
- device_register()和platform_device_register()的区别
- inotify针对vim、gedit类的文件监控
- ORA-14450 ERROR DELETING FROM A GLOBAL TEMPORARY TABLE Bug 5334271
- spring aoc控制反转学习<一>