C语言编译和链接过程简介

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语言进阶教程”


猜你喜欢

转载自blog.csdn.net/liuchunjie11/article/details/80252811