编程爱好者
 ppppp.cn
预处理器、编译器、汇编器、链接器
(发布日期: 2022-02-23  阅读:172次)

预处理器、编译器、汇编器、链接器

 

从源文件到可执行文件

 

考虑两个源文件。

main.c

int sum(int *a, int n);

int aray[2] = {1, 2};

int main()

{

    int val = sum(array, 2);

    return val;

}

 

sum.c

int sum(int *a, int n)

{

    int i, s = 0;

        for(i = 0; i < n; i++){

        s += a[i];

    }

}

 



如上图。驱动程序依次执行以下步骤:

 

首先,运行C预处理器(cpp),将C的源程序main.c翻译成一个ASCII码的中间文件main.i

 

接下来,运行C编译器(ccl),将main.i翻译成一个ASCII码的汇编语言文件main.s

 

然后,运行汇编器(as),将main.s翻译成一个可重定位目标文件main.o

 

经过上述三个步骤生成sum.o

 

最后,运行链接器(ld),将main.osum.o以及一些必要的系统文件组合起来,创建一个可执行目标文件prog

 

各阶段的功能如下:

 

预处理主要用于C语言编译器对各种预处理命令进行处理,包括对头文件的包含、宏定义的扩展、条件编译的选择等。例如,对# include指示的处理结果,就是将对应.h文件的内容插入到源程序文件中。

 

编译会先对源程序进行词法分析、语法分析和语义分析,然后根据分析的结果进行代码优化和存储分配,最终会把C语言源程序翻译成汇编语言程序。

 

汇编的功能是将编译生成的汇编语言代码转换为机器语言代码。

 

链接的功能是将所有关联的可重定位目标文件组合起来,以生成一个可执行文件。




ref:https://blog.csdn.net/qq_39918677/article/details/120372053