关于库的一些介绍和理解

  在编写程序的过程中,我们几乎时刻都在使用各种各样的库,静态库(LIB)、动态库(DLL)、函数库、模板库等等,有些是SDK(Software Develop Kit)中提供的,有些则是程序员自己封装的,这些库各有各的用法和特点。个人感觉可以把库理解为编译好的可直接被其他程序动态或静态调用的、封装了具体实现对外只暴露接口的具有显著可重用性的代码集合。另外库不是可执行文件,只是编译好的、可以被其他程序调用的“代码块”。

  库大致上分为两类,文件名为*.lib的静态库和文件名为*.dll的动态链接库。lib静态库的意思是静态链接,如果程序调用了相关的静态库,那么在程序编译的过程中,静态库的代码会被链接进程序中,这样在生成的目标代码就包含了所用到的静态库中的代码。而dll动态库和lib同样是封装和隐藏了具体实现只暴露接口的代码集合,不同的是使用到dll的程序在编译成目标代码的时候只会给用到dll的地方预留一个位置,也可以理解为程序中标记了在什么位置会用到哪个dll中的那个函数,但编译过程中不会把dll中具体的实现代码链接到程序的目标代码中,只是在目标代码运行过程中进行动态的调用(载入),调用完毕后会从内存中卸载掉相关的代码。因为是在程序运行时刻动态链接而非编译器期间的静态链接,所以显而易见的好处是减少了程序的大小,提高了程序的运行效率,而且,dll因为是动态链接,程序在编译的时候只会记住具体的接口符号而只在运行的时候才会把具体的实现代码载入,这样其实实现了库和程序的分离,我们可以在不改变dll接口名的情况下(接口名改变了的话程序在运行的时候就找不到dll中具体的函数了,因为这个接口名是程序和dll的唯一“约定”)更改dll中某些接口的具体实现,而在程序再次运行的时候它所动态载入的就是新的实现了,最大的用处就是利于程序的维护和升级,使用了dll的程序可以在很大程度上避免因为一些功能的改动或者数据参数的更新而进行的程序的频繁修改和发布。我们平时所用到的一些应用程序甚至操作系统在升级的时候经常看到的是一些dll的下载和更新而不用卸载客户端进行再一次的新客户端下载就是这个道理了。

  此外,多个应用程序可以同时访问内存中单个dll副本的内容,因为dll是一个包含可有多个应用程序同时使用的代码和数据的库。例如,在windows操作系统中,Comdlog32执行与对话框有关的常见函数,因此,每个程序都可以使用该dll中包含的功能来实现“打开对话框”,这样就充分实现了代码的复用。而且,只有程序在运行过程中要调用dll的时候dll中的相关代码才会被载入到内存中,这样就提高了程序的载入效率和内存的有效利用。

  另外,关于dll的使用,其实仍然需要一个lib文件。这个lib文件在程序被编译后会链接到程序中保证在程序执行过程中操作系统可以知道你要用到的dll的具体位置和函数地址。一般情况下,lib文件里有一个相应的dll文件的名字和一个指明dll输出函数入口的地址表,如果不想用lib文件或者没有lib文件的话可以用类似WIN32 API函数LoadLibrary、GetProcAddress等得到函数的地址。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值