静态连接库就是把(lib)文件中用到的函数代码直接链接进目标程序,程序运行的时候不再需要其它的库文件。
动态链接就是把调用的函数所在文件模块(DLL)和调用函数在文件中的位置等信息链接进目标程序,程序运行的时候再从DLL中寻找相应函数代码,因此需要相应DLL文件的支持。
动态链接的主要目的:把程序与他们使用的特定的函数库版本中分离开来。
静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了。但是若使用 DLL,该 DLL 不必被包含在最终 EXE 文件中,EXE 文件执行时可以“动态”地引用和卸载这个与 EXE 独立的 DLL 文件。
静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。
动态链接的优点:
(1)可执行文件的体积可以非常小,节省磁盘空间和虚拟内存,能更加有效的利用磁盘空间。
(2)链接-编辑阶段的时间会缩短(因为链接器的有些工作被推迟到载入)
(3)所有动态链接到某个特定函数库的可执行文件在运行时共享该函数库在内存中的一个单独拷贝。这就提供了更好的I/O和交换空间利用率,节省了物理内存,提高了系统整体性能。
动态链接的缺点:运行速度比静态链接慢。