简单介绍c语言程序的编译与链接

程序运行的背后

程序在运行时经历了四个步骤,分别是预编译(Prepressing)、编译(Compilation)、汇编(Assembly)和链接(Linking)。

预编译

预编译也称预处理,源代码文件(.c)和相关的头文件(.h)等被预编译器cpp预编译成一个 .i 文件。

编译

编译过程就是将预处理后的文件进行一系列词法分析、语法分析、词法分析及优化后产生相应的汇编代码文件(.s)。这个过程往往是整个程序构建的核心,也是最复杂的部分之一。

汇编

汇编器将汇编代码转换为计算机可执行的指令,每一条汇编语句几乎都对应着一条机器指令。整个过程相对简单,只是根据汇编指令和机器指令一一翻译。经过预编译、编译和汇编之后直接输出目标文件(object File)

链接

链接的本质就是把不同的目标文件接起来,组成一个整体,但是这些目标文件也一定要有固定的规则才行,目标文件的拼合实际上是目标文件之间对地址的引用,也就是函数和变量的地址的引用,比如目标文件(A)要调用目标文件(B)的函数,也就是说函数"Func"在目标文件(B)定义,目标文件(A)引用了目标文件(B)的函数"Func",这个概念同样适用于变量,函数和变量都要有自己独特的名字,才能避免链接过程中不同的函数与变量混淆,在链接过程中,变量与函数称为符号,函数名和变量名就是符号名。

  • 15
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值