动态链接库和静态链接库

在c语言里,源码需要经过编译才能成为可执行文件

库文件:用于存放可复用的代码块,库文件被添加到c语言项目中后,就可以多次调用其中的函数。大多数程序员并不会直接分享源码,而是分享文件的二进制版本—链接库

链接库:是对库文件源码进行编译打包后得到的二进制文件,但无法独立运行,必须等程序调用才能被载入内存

头文件:说明函数名,入参出参等,告诉编译器一些函数和类型声明信息,以便程序正确的编译链接。
一个完整的c语言项目可能包含多个c文件,项目运行需要经过编译和链接两个过程

编译:编译器分析源码,生成二进制目标文件,会互相调用对方的函数,变量,也可能会调用某些链接库文件中的函数和变量,编译器无法跨文件找到他们的确切存储地址,所以这些文件还无法单独执行

链接:对于各目标文件中缺失的函数或变量(缺失的地址)由链接器负责修复,并最终将目标文件和链接库组成一个可执行文件。

链接器完成链接的方式:

静态链接库lib:在生成可执行文件前完成链接,(拷贝了所有目标文件和静态链接库的指令和数据),生成可独立运行的可执行文件,会浪费内存空间,程序有模块更新,整个程序就必须重新链接后一起运行,对用户不友好。(也可以通过头文件获取静态库的内容,进行预编译,之后的执行会比较快),每个用到库文件的程序都会有一份lib的拷贝,浪费空间,等静态库更新需要重新编译链接。

动态链接库dll:将日标文件组织成一个可执行文件,运行时将需要的库动态载入内存,由动态链接器完成可执行文件和动态文件库的链接。每次程序运行重新链接,会损失部分性能,时间换空间。(源码通过头文件获取动态链接库的内容,在运行过程中调用对应动态链接库的命令)。动态加载库文件并链接代码和资源,多个程序可以共享库文件,易于维护,但运行时加载和链接库文件,运行会比较慢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值