【静态链接】第1章---------------------概述
来源:互联网 发布:站长之家软件下载 编辑:程序博客网 时间:2024/05/29 19:49
######## 该系列博文为书籍《程序员的自我修养》的笔记 ##########
【说明】
我们在linux下学hello world时候,是直接用GCC编译,然后运行的,但是,要从源代码 到可执行文件显然不是一件容易的事,GCC到底都干了些什么呢,这一节,我们简单介绍从源代码到可执行文件的要经过哪些步骤!
【预处理】
还记得C语言教科书中对#include 的介绍吗,没错,这个预处理命令就是把后面的文件复制到当前位置。
预处理处理那些源代码中以#开头的指令,比如#include #define 等等,处理后的文件后缀名是.i(c++是.ii),主要干以下事情
1)删除#define 扩展所有的宏定义,正如C教科书说的
2)处理条件编译语句 "#if" "#endif" 等等
3)递归得包含#include 后面的文件,也就是说也就是被包含的文件如果也有#include 指令也要插入相应的文件哦
4)删除所有注释, 反正编译器又看不懂注释。。。。
5)#pragma 指令需要保留,给编译器用的
【编译与汇编】
编译就是把用源文件生成汇编代码,其实也不单单是汇编代码,里边也包含了一些信息给后面的过程使用,至于编译的原理,我想学计算机的都知道它是很复杂的,这里只是简单介绍一下一般编译分为哪些过程,要想深入学习编译原理,推荐看传说中的龙书《编译原理》,汇编就是生成机器码了
1)词法分析:利用有限状态机算法,将源代码字符序列分割成一系列的记号,比如关键字,标示符等等
2)语法分析:利用上下文无关语法对记号进行语法分析,产生语法树
3)语义分析:语法分析仅仅完成对表达式语法层面的分析,不了解这个语句是否真正有意思,语义分析给语法树加上类型
4)中间语言生成:它将语法树换成中间代码,这样编译器可以分为前端和后端,前端负责产生机器无关的中间码,后端再转换成机器码,这样可以方便优化
5)目标代码生成和优化:将中间语言转换成目标代码,并加以优化,这一步和体系相关
【链接】
链接就是把一些模块组合起来生成一个可执行文件,它的原理也很复杂,是我们学习的重点,后面大部分是将链接的,不过还包含一些库的内容
链接的主要过程包括 地址和空间分配,符号决议,重定位等
1)里边的.o文件称为“目标文件”,也叫“模块”
- 【静态链接】第1章---------------------概述
- 【静态链接】第2章---------------------静态链接过程(静态库链接)
- 第1章 概述
- 第1章 概述
- 第1章 概述
- 第1章 概述
- 【静态链接】第2章---------------------静态链接过程(空间地址分配)
- 【静态链接】第2章---------------------静态链接过程(符号解析与重定位)
- 【程序员的自我修养】第4章 静态链接
- 【静态链接】第2章---------------------目标文件(它是什么)
- 【静态链接】第2章---------------------目标文件(符号)
- 第2部分 静态链接---(4)静态链接
- 第1章 Make概述
- 第1章 ExtJS 概述
- 第1章 Linux概述
- 第1章 C#概述
- 第1章 电子商务概述
- 《计算机网络》第1章概述
- debian下OpenCV安装 + 简单测试实例
- flex之[Bindable]
- Beaglebone Black 上手
- 批处理文件的相对路径
- Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)
- 【静态链接】第1章---------------------概述
- hdu 1069 Monkey and Banana(dp 最长上升子序列)
- navigationBar leftBarItem 按钮点击范围
- OCP-1Z0-053-V13.02-707题
- Oracle设置(1)设置Oracle数据库为Linux系统服务
- centos安装pgrouting
- Linux下的IPC-UNIX Domain Socket
- mac安装weblogic 12
- Java移位运算符详解实例——左移位运算符>>、带符号的右移位运算符>>