C语言编译链接生成可执行文件四大步骤:预处理->编译->汇编->链接

Posted Dontla

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言编译链接生成可执行文件四大步骤:预处理->编译->汇编->链接相关的知识,希望对你有一定的参考价值。

一、编译过程简介

    编译过程可以分为4部分内容组成

    预处理器->编译器->汇编器->链接器

1、预处理器

        (1)、处理所有的注释,以空格代替

        (2)、讲所有的#define删除,并且展开所有的宏定义

        (3)、处理条件编译指令#if,#ifdef、#elif,#else、#endif

        (4)、处理#include,展开文件包含

        (5)、保留编译器需要使用#pragma指令

       预处理指令示例:

        gcc -E file.c -o file.i

2、编译器

       (1)、对预处理文件进行语法分析、词法分析、语义分析

               语法分析:分析表达式是否遵循语法规则

               词法分析:分析关键字,标识符,立即数是否合法

               语义分析:在语法分析基础上进一步分析表达式是否合法

        (2)、分析结束后进行代码优化生成相应的汇编代码文件

        编译指令示例:

        gcc -S file.i -o file.s

3、汇编器

         (1)、汇编器将汇编代码转变为机器可以执行的指令,也就是机器指令

         (2)、每条汇编指令几乎都对应一条机器指令

         汇编指令示例:

         gcc - c file.s -o file.o

二、链接过程简介

    链接是指将目标文件最终生成可执行文件

   根据链接方式的不同,链接过程可以分为:

         1、静态链接:目标文件直接进入可执行文件

         2、动态链接:在程序启动后才动态加载目标文件

    链接器的意思:链接器的主要作用是把各个模块之间相互引用部分处理好,使得各个模块之间能够正确的链接

在这里插入图片描述

1、静态链接: 由链接器在链接时将库的内容直接加入到可执行程序中

在这里插入图片描述

2、动态链接:

          (1)、可执行程序在运行时才动态加载库进行连接

          (2)、库的内容不会进入可执行程序                   

在这里插入图片描述
引用文章:C语言编译和链接过程简介

以上是关于C语言编译链接生成可执行文件四大步骤:预处理->编译->汇编->链接的主要内容,如果未能解决你的问题,请参考以下文章

C语言——编译器如何将C源文件编译成可执行代码?

学习总结

C语言文件的编译与执行的四个阶段并分别描述

gcc基本功能以及常见编译选项

GCC编译流程

Linux中,运行一个C语言程序如何运行