静态库与动态库笔记

背景

用QT编写上位机程序(windows)时需要使用PCAN提供的API,这些API以动态链接库的形式提供。

静态库与动态库

静态库.a(win下是lib) 和动态库.so(win下是.dll),所谓静态、动态是指链接

静态库: 在链接步骤中,连接器将库文件取得所需的代码,复制到生成的可执行文件中,这种库叫做静态库,其特点是可执行文件中包含了库代码的一份完整拷贝;缺点就是被多次使用就会有多份冗余拷贝。即静态库中的指令全部被直接包含在最终生成的exe文件中。在vs中新建生成静态库的工程,编译生成成功后,只产生一个.lib文件

动态库: 动态库链接是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行的文件,动态库提供一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个DLL中,该DLL中包含一个或者多个已经被编译,链接并使用它们的进程分开存储的函数,在vs中新建生成动态库的工程,编译成功后,产生一个.lib和一个.dll文件

静态库的lib: 该lib包含函数的代码本身(包括函数的索引,也包括实现),在编译 的时候将代码加入程序当中

动态库的lib: 该lib包含了函数所在的DLL文件和文件中函数位置的信息,函数实现代码由运行的时候加载在进程空间中DLL提供,总之,lib是编译的时候用到的,如果完成源代码的编译,只需要lib如果要使得动态库的程序运行起来,只需要dll

优缺点比较

静态库特点:
静态库对函数库的链接是放在编译期完成的,程序在运行的时候与函数库再无瓜葛,移植方便
缺点:浪费空间与资源,因为所有相关的目标文件与牵扯到的函数库会被合成一个可执行的文件。
是静态库对程序的更新,部署和发布会带来麻烦,如果静态库更新,所有使用它的应用程序程序都需要重新编译,发布给用户。

动态库特点:
动态库把一些库函数的链接载入推迟到程序运行的时期,可以实现进程之间的资源共享
将实现进程之间的资源共享,将一些程序升级变得简单。甚至可以真正做到链接载入完全由程序代码中控制(显示调用)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值