C/C++代码变为可执行文件的Toolchain

源文件(.c/.cpp) → 预处理(展开头文件,将对应的宏进行替换,把注释去掉)得到扩展源代码文件 → 编译器(gcc/g++)进行编译得到汇编文件(.s) → 汇编器进一步处理得到二进制文件(.obj/.o) → 链接器(将二进制文件进行链接)得到一个打包好的可执行文件。

1. 编写源代码

  • 源文件:程序员编写的源代码文件,通常是.c(C语言)或.cpp(C++语言)文件。

2. 预处理(Preprocessing)

  • 工具:预处理器(例如,C预处理器cpp)。

  • 过程:

  • 展开头文件:将#include指令引用的所有内容插入源文件。

  • 宏替换:将#define定义的宏替换为相应的值或代码。

  • 移除注释:删除源代码中的所有注释。

  • 结果:产生一个“扩展源代码”文件,通常是临时的,不会实际保存。

3. 编译(Compilation)

  • 工具:编译器(例如,GCC对于C,G++对于C++)。

  • 过程:

  • 将扩展的源代码转换为汇编语言代码。

  • 这一步涉及语法分析、语义分析、优化等多个子步骤。

  • 结果:生成汇编代码文件,通常是.s文件。

4. 汇编(Assembly)

  • 工具:汇编器(例如,as)。

  • 过程:

  • 将汇编语言代码转换为机器代码。

  • 每条汇编指令被转换为机器指令。

  • 结果:生成目标文件(Object File),通常是.o(在Unix/Linux系统)或.obj(在Windows系统)。

5. 链接(Linking)

  • 工具:链接器(例如,ld)。

  • 过程:

  • 将一个或多个目标文件与库文件(如静态库或动态库)链接在一起。

  • 解决符号引用,例如函数和全局变量的地址。

  • 处理静态和动态链接。

  • 结果:生成可执行文件,通常是没有扩展名的文件(在Unix/Linux系统)或.exe文件(在Windows系统)。

6. 最终的可执行文件

  • 说明:链接器输出的最终产品是一个可执行文件,它包含了程序运行所需的所有机器代码和资源。

总结

整个过程是将高级语言编写的源代码转换为机器能够直接执行的二进制代码。这个过程涉及多个阶段和工具,每个阶段都对代码进行特定的转换和优化。这个工具链的核心组成部分是预处理器、编译器、汇编器和链接器。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值