C语言的编译与链接

这篇文章我们主要将c语言的编译与链接的具体步骤。

        我们知道,计算机是不认识我们在IDE中编写的高级程序语言的,计算机只能够识别机器语言(二进制语言),所以在我们的IDE中,计算机是如何让我们编写的一系列代码转化为二进制并且生成可执行程序的呢。

1.编译链接的大致操作

       我们先了解编译与链接的大致操作,我们编写好的源文件首先通过编译器转换成目标文件,即.obj文件,此时每个源文件是分别编译的,接下来链接器将库和每个目标文件链接到一起生成可执行文件,即.exe文件。

2.细分编译过程

        编译过程主要分为预编译(预处理),编译,汇编三个过程,如下图所示

 

C语言的编译与链接_第1张图片

2.1.预编译阶段

        在预编译阶段,包含头文件就是在预处理环节完成的,所谓预处理是指在进行编译的第一遍扫描。预处理是C语言的一个重要功能, 它由预处理程序负责完成。当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理部分作处理。

在预编译阶段,.c文件(源文件)转换位.i文件

2.2.编译阶段

        在编译阶段,会进行语法分析,词法分析,语义分析,符号汇总等操作,编译程序所要作得工作就是通过词法分析和语法分析,在确认所有的指令都符合语法规则之后,将其翻译成等价的中间代码表示或汇编代码。在编译操作之后,在预编译阶段生成的  .i文件会生成  .s文件

2.3.汇编阶段

        在汇编阶段,在汇编阶段,每一个 .s文件会生成自己的符号表,并且把汇编代码生成二进制指令,在这个过程中 .s文件会生成 .o文件(目标文件)。

3.链接过程

        在链接过程中,主要进行的操作是合并段表,合并符号表并且将符号表中的相同符号重定位,重定位的目的是确定每个符号的最终正确位置,最终将 .o文件生成 .exe文件。

4.运行过程

程序执行的过程:
1. 程序必须载入内存中。在有操作系统的环境中:一般这个由操作系统完成。在独立的环境中,程序
的载入必须由手工安排,也可能是通过可执行代码置入只读内存来完成。
2. 程序的执行便开始。接着便调用main函数。

3. 开始执行程序代码。这个时候程序将使用一个运行时堆栈(stack),存储函数的局部变量和返回
地址。程序同时也可以使用静态(static)内存,存储于静态内存中的变量在程序的整个执行过程
一直保留他们的值。
4. 终止程序。正常终止main函数;也有可能是意外终止
 

你可能感兴趣的:(c语言,开发语言)