《程序员的自我修养》笔记一:编译和链接

IDE/build(构建)

GCC 编译过程分解

现在的 IDE 将编译和链接的过程合并到了一起


预处理『.i』

头文件被预编译成 『.i』 文件,经过预编译后的 『.i』 文件不包含任何宏定义,包含的文件被插入到 『.i』 文件中,判断宏定义是否正确或头文件包含是否正确时,可以查看预编译后的文件来确定。

  • #define 删除,展开所有宏定义
  • 处理所有条件预编译指令
  • 处理 #include 预编译指令
  • 删除所有注释
  • 添加行号和文件名标识,便于编译时给出行号信息
  • 保留所有的 #pragma 编译器指令

编译『.s』

编译过程

把预处理完的文件生成汇编代码文件,GCC 把预处理和编译合并为一个步骤

编译器

将高级语言翻译成机器语言的工具

  • 扫描
  • 语法分析
  • 语义分析
  • 源代码优化
  • 代码生成
  • 目标代码优化

汇编『.o』

将汇编代码转换为机器指令,每个汇编语句几乎都对应一条机器指令

目标文件

源代码经过编译后形成的汇编文件 .o


链接『.out』

链接过程

按照功能和性质将(软件)代码分为不同的功能模块,各个模块之间相互依赖又相对独立,链接就是将多个模块拼接成程序(软件)的过程。

链接器

将几个输入目标文件加工后合并成一个输入文件

  • 地址和空间分配
  • 符号决议(地址绑定、指令绑定)
  • 重定位

静态链接

将编译后的目标文件『.o』 与库 『lib』一起链接形成可执行文件

一组目标文件的包,将一些常用的代码编译成为目标文件后打包存放

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值