生成可执行程序四个步骤:预处理、编译、汇编、链接

预处理

相当于根据预处理指令组装新的c/c++程序,经过预处理,会产生一个没有头文件(都已经被展开了),宏定义(都已经替换了),没有条件编译指令(该屏蔽的都屏蔽掉了),没有特殊符号的输出文件,这个文件的含义同原本的文件无异,只是内容上有所不同。

编译

将预处理完的文件逐一进行一系列词法分析,语法分析,语义分析及优化后,产生相应的汇编代码文件。编译是针对单个文件编译的,只校验本文件的语法是否有问题,不负责寻找实体。

链接

通过链接器将目标文件(或许还有库文件)链接在一起生成一个完整的可执行程序。链接程序的主要工作就是将有关的目标文件彼此相连接,也就是将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来,在此过程中会发现被调用的函数未被定义。链接阶段只会链接调用了的函数/全局变量,如果存在一个不存在实体的声明(函数声明,全局变量的外部声明),但没有被调用,依然是可以正常编译执行的。

源文件通过编译器得到目标文件,链接器将各目标文件或库文件链接得到可执行程序。

  • 组成一个程序的每个源文件通过编译过程分别转换成目标代码
  • 每个目标文件由链接器捆绑在一起,形成一个单一而完整的可执行程序
  • 链接器同时也会引入标准C函数库中任何被该程序所用到的函数,而且它可以搜索程序员个人的程
  • 序库,将其需要的函数也链接到程序中。

编译本身也分为几个阶段:

  • 预处理  gcc -o test.i -E test.c
  • 编译 gcc -o test.s -S test.i
  • 汇编 gcc -o test.o -c test.s

生成可执行程序四个阶段

如下图所示:

生成可执行程序四个步骤:预处理、编译、汇编、链接_第1张图片

 

你可能感兴趣的:(c++,c++)