C/C++源程序到可执行程序exe的全过程


本文参考了博客,其地址如下:https://blog.csdn.net/a3192048/article/details/90143629

 

源文件生成可执行文件的过程总共是经历了预处理、编译、汇编、链接四个过程。

源程序(source code)→预处理器(preprocessor)→编译器(compiler)→汇编程序(assembler)→目标程序(object code)→连接器(链接器,Linker)→可执行程序(executables

 

 1.预处理——生成  .i  文件

主要作用:

  1. 删除 #define ,展开所有宏定义
  2. 处理条件预编译
  3. 处理#include,将头文件插入对应位置
  4. 删除所有注释
  5. 添加行号和文件标识符,用于显示调试信息:错误或警告的位置
  6. 保留 #pragma 编译器指令。设定编译器状态;指示编译器完成一些特定的动作

2.编译——生成汇编代码文件 .s

对预处理后的文件进行语法分析,词法分析,语义分析,符号汇总,然后生成 .s 文件,得到的是汇编代码。

3.汇编——生成二进制目标文件 .o

将汇编代码转成二进制文件。另外,会形成符号表,给这些符号分配虚拟地址。

4.链接——生成默认 a.out

把二进制文件链接成一个可执行的指令

链接所完成的任务是合并段表,然后把符号表合并并且对符号表进行重定位。

所谓合并段表,源代码编译生成的 a.out 会包含很多段,数据段,文本段,bss段等,编译过程中,不同的数据会对应到不同的段中, 在 .o 文件中就已经有了分段

所谓符号表合并和重定位是说最后只有一个符号表,这个符号表是由前面汇编形成的多个符号表进行合并。在这里不在同一个符号表的符号,要对他们进行重定位。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM