静态链接和动态链接

编译过程包括预编译、编译和汇编,最终通过链接生成可执行文件。预编译处理宏和#include等指令,编译涉及词法、语法和语义分析,汇编则将指令转为机器码。链接有静态和动态两种方式,静态链接将所有内容打包进可执行文件,而动态链接在运行时加载库文件,节省存储空间并便于更新。
摘要由CSDN通过智能技术生成

编译过程

编译过程分三步:预编译、编译、汇编,编译之后链接生成可执行文件。

  1. 首先对源文件进行预处理。(如宏、#include、预编译指令#ifdef等) 生成.i文件,这个过程也叫做预编译(Processing)。
  2. 然后进行编译,这个过程主要是进行词法分析、语法分析语义分析等,生成.s的汇编文件。
  3. 最后进行汇编,这个过程比较简单,就是将对应的汇编指令翻译成机器指令,生成可重定位的二进制目标文件,生成.o文件。
  4. 现代的编译器将一个源代码文件编译成一个未链接的目标文件,然后由链接器最终将这些目标文件链接起来形成可执行文件。

链接包括两种方式:静态链接和动态链接。

静态链接

静态链接将链接文件打包成在项目下的.o文件,在链接阶段,会将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件中。因此对应的链接方式称为静态链接。

静态链接是将程序中使用的库文件的代码编译进程序本身,生成一个单独的可执行文件。这意味着程序在运行时不需要依赖外部库文件。

特点:

  • 静态库对函数库的链接是放在编译时期完成的。
  • 程序在运行时与函数库再无瓜葛,移植方便。
  • 浪费空间和资源。因为所有相关的目标文件与牵涉到的函数库被链接合成一个可执行文件。

动态链接

动态链接将程序中使用的库文件的代码编译成独立的库文件,在程序运行时再进行链接。这样,多个程序可以共享同一个库文件,减少了重复代码的占用空间

特点:

  • 共享一个副本
  • 更新比较方便。更新时只需要替换原来的目标文件,而无需将所有的程序再重新链接一遍。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

惊雲浅谈天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值