在做项目的时候常常会听到同事们说起“库”这个词语,首先我们能想到的就是静态链接库lib和动态链接库dll。所谓的库就是一些功能代码经过编译连接后的可执行形式。
首先我们区分一下lib和dll:
共同点:它们都是共享代码的方式。
不同点:
1、静态链接库lib,lib中的指令都全部被直接包含在最终生成的exe文件中,在编译链接时直接将需要的执行代码拷贝到调用处。而动态链接库dll指令不必包含在最终的exe文件中,exe文件可以“动态”地引用和卸载dll文件,换名话句话说,它在编译的时候不直接拷贝可执行代码,而是通过记录一系列符号和参数,在程序运行或加载时将这些信息传递给操作系统,操作系统负责将需要的动态库加载到内存中,然后程序在运行到指定的代码时,去共享执行内存中已经加载的动态库可执行代码,最终达到运行时连接的目的。
2、静态链接库lib,不能再包含其他动态或静态链接库;而动态链接库还可以包含其他的动态或静态链接库。
综上,他们各自的优缺点就很明显了:
静态链接:程序发布的时候就不需要的依赖库,也就是不再需要带着库一块发布,程序可以独立执行,但是体积可能会相对大一些。
动态链接:优点是多个程序可以共享同一段代码,而不需要在磁盘上存储多个拷贝,缺点是由于是运行时加载,可能会影响程序的前期执行性能。
特别注意:
DLL是动态链接库,但lib就一定是静态链接库吗?我