静态链接库和动态链接库的使用场景

静态链接库:

  • 静态链接库工程编译后,生成.lib文件。 在目的程序使用静态链接库的场合,直接将.lib文件中的全部函数链接到目的程序中。

  • 运行生成的目的程序的场合,不再需要.lib文件就可以直接运行。

  • 当静态链接库发生变化的场合,目的程序必须要重新编译,否则执行时静态链接库的内容没有更新。

动态链接库:

  • 动态链接库工程编译后,生成.lib和.dll文件。 .dll文件是作为共享函数库的可执行文件。
  • 不同编程语言编写的程序只要按照函数调用约定就可以调用同一个DLL函数库。
  • 适用于大规模的软件开发,使开发过程独立、耦合度小,便于不同开发者和开发组织之间进行开发和测试。
  • DLL文件的内容发生变化时,只要输出接口不变(即名称、参数、返回值类型和调用约定不变),更换DLL文件就好,EXE文件不用再次编译也可以在执行时更新调用DLL函数的内容。极大地提高了可维护性和可扩展性。
  • 运行程序时,必须保证.dll是存在的,否则会出错。

什么场合下适用静态链接库:

  • 因为静态链接库会使得.exe文件的size变大,并且相对于动态链接库运行速度更快。故静态链接库适用于小型应用的开发。

什么场合下适用动态链接库:

  • 因为静态链接库不能链接其它链接库,无论静态接库或者动态链接库。所吸,当该当链接库还需要链接其它的链接库,包括静态或者动态链接库的场合,应该使用动态链接库。
  • 因为动态链接库.dll可以独立于.exe而存在,当开发大型软件的场合,或者说多个应用程序需要链接到该.dll时,.dll的逻辑需要修正的场合,其应用程序不需要再次编译。减少软件的耦合。
  • 由于动态链接库.dll可以链接到不同编程语言的工程,所以对于多语言的软件开发的场合也是适用的。

DLL(dynamic link library)其实也是一种可执行文件格式。跟 .exe 文件不同的是,.dll 文件不能直接执行,他们通常由 .exe 在执行时装入,内含有一些资源以及可执行代码等。其实 Windows 的三大模块就是以 DLL 的形式提供的(Kernel32.dll,User32.dll,GDI32.dll),里面就含有了 API 函数的执行代码。为了使用 DLL 中的 API 函数,我们必须要有 API 函数的声明(.H)和其导入库(.LIB),函数的原型声明不难理解,那么导入库又是做什么用的呢?我们暂时先这样理解:导入库是为了在 DLL 中找到 API 的入口点而使用的。

windows开发和使用dll需注意三种文件
1.dll头文件 (.h)
它是指dll中说明输出的类或符号原型或数据结构的.h文件。当其它应用程序调用dll时,需要将该文件包含入应用程序的源文件中。
2. dll的导入库文件(.lib)
它是dll在编译、链接成功后生成的文件。主要作用是当其它应用程序调用dll时,需要将该文件引入应用程序。否则,dll无法引入。
3.dll文件(.dll)
它是应用程序调用dll运行时,真正的可执行文件。dll应用在编译、链接成功后,.dll文件即存在。开发成功后的应用程序在发布时,只需要有.exe文件和.dll文件,不必有.lib文件和dll头文件。

总结:
1.动态链接库中的.lib并不包含由.cpp生成的目标文件,目标文件都包含再.dll中,.lib仅仅是提供链接到.DLL的地址信息等。所以对于动态链接来说,.lib和.dll缺一不可。主要体现在:在编译时如果你加了.lib的依赖项,不会出任何问题,但运行时,若没有.dll,会提示找不到xx.dll的信息。
2. 对于静态库lib,索引和实现都在其中。这时不需要dll。
3. 静态链接的静态就是链接时把里面需要的东西抽取出来安排到你的exe文件中,以后运行你的exe的时候不再需要lib。
4. 动态链接的动态就是exe运行时,依赖于dll里面提供的功能,没有这个dll,你的exe无法运行。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值