异同 | 静态链接库 | 动态链接库 |
---|---|---|
区别 | 两个差别(一)静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,lib中的指令都全部被直接包含在最终生成的exe文件中了。但是若使用dll动态链接库,该dll不必被包含在最终的exe文件中,执行文件执行时可以动态地引用和卸载这个与exe独立的dll文件(二)静态链接库不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。 使用差别静态链接库动态链接库使用的区别在于它允许可执行模块(dll或exe文件)仅包含在运行时定位dll函数的可执行代码的所需信息。静态链接库的使用中,连接器从静态链接库获取所有被引用的函数,并将库同代码一起放到可执行文件中。 | |
各自特点 | 1 本身包含了代码,地址符号表等-2 静态链接库是一个或多个obj文件的打包,所以有人干脆把从obj文件生成lib的过程称为Archive即合并到一起。3当我们应用工程在使用静态链接库的时候,静态链接库要参与编译,在生成执行文件之前的链接过程中,将静态链接库的全部指令直接链接如可执行文件中,故而,在可执行文件生成以后,静态链接库.lib可以弃之不用; | 1 实际执行的代码位于动态库中,到入库只包含了地址符号表2动态链接库是作为共享函数库的可执行文件,动态链接库提供了一种方法,是进程可以调用不属于其可执行代码的函数。dll 还有助于共享数据和资源。多个应用程序可同时访问内存中单个dll副本的内容。 |
优缺点 | 使用动态链接库代替静态链接库优点:dll 节省内存,减少交换操作,节省磁盘空间,更易于升级(不需要重链接和重编译),提供售后支持,提供MFC库类的机制,支持多语言支持。 | |
备注 |
[表1:静态链接库与动态链接库差别]
- 静态库本身就包含了代码,地址符号表等,而对于导入库而言,其实际的执行代码位于动态库中,导入库只包含了地址符号表等,确保程序找到对应函数的一些基本地址信息;
- 静态链接库是一个或多个obj文件的打包,所以有人干脆把从obj文件生成lib的过程称为Archive即合并到一起。当我们应用工程在使用静态链接库的时候,静态链接库要参与编译,在生成执行文件之前的链接过程中,将静态链接库的全部指令直接链接如可执行文件中,故而,在可执行文件生成以后,静态链接库.lib可以弃之不用;
- 动态链接库是作为共享函数库的可执行文件,动态链接库提供了一种方法,是进程可以调用不属于其可执行代码的函数。dll 还有助于共享数据和资源。多个应用程序可同时访问内存中单个dll副本的内容。
- 使用动态链接库代替静态链接库优点:dll 节省内存,减少交换操作,节省磁盘空间,更易于升级(不需要重链接和重编译),提供售后支持,提供MFC库类的机制,支持多语言支持。
- 静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,lib中的指令都全部被直接包含在最终生成的exe文件中了。但是若使用dll动态链接库,该dll不必被包含在最终的exe文件中,执行文件执行时可以动态地引用和卸载这个与exe独立的dll文件。
- 另一个区别是,静态链接库不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。
- 静态链接库动态链接库使用的区别在于它允许可执行模块(dll或exe文件)仅包含在运行时定位dll函数的可执行代码的所需信息。静态链接库的使用中,连接器从静态链接库获取所有被引用的函数,并将库同代码一起放到可执行文件中。