【Linux】程序的编译与运行(4阶段实例+图解)

这里我用linux系统的gcc编译器演示一下一个计算机程序的编译过程。
程序的编译一般分为4个步骤:
1.预处理阶段,
2.编译阶段,
3.汇编阶段,
链接阶段。

写一个简单的c代码:
在这里插入图片描述

1 .预处理阶段:

预处理一般要干的事情有展开头文件,宏定义替换以及相关的预处理指令

#include<stdio.h>
#define once 1
#pragma once

#就是代表预处理指令,所有带#的一般都写在文件的最上方,就是为了预处理的正确执行和后续的代码需求。
在这里插入图片描述

2.编译阶段:

编译阶段狭义的理解就是把我们的高级语言(c,c++,java)代码转换成汇编指令,为了后续的汇编工作。

但是编译其实是一个很广的概念,如果你想细细去研究计算机的编译,就会发现其中包含了语法分析,词法分析,语义分析,代码优化等等,《编译原理》一书中有详细介绍。

在这里插入图片描述

3.汇编阶段

汇编阶段就是把我们编译过的汇编指令变成机器指令
汇编指令就是机器指令的简单替换。
在这里插入图片描述

4.链接阶段

就是通过调用链接器来链接程序运行需要的目标文件,以及所依赖的其它库文件,最后生成可执行文件。
链接库分为动态链接库和静态链接库
gcc默认使用的是动态链接库。

静态链接:链接动态库生成可执行程序,就是把库文件我们需要的代码指令放入可执行程序,存在冗余,不过优点是不依赖其他环境。
动态链接:就是在可执行程序中写入了库的符号信息表,使用的时候去调用,也不会有冗余,就是必须依赖动态库的存在。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zhaocx111222333/article/details/114827272