要想了解分清楚什么是动态链接库,什么是静态链接库,就要先分清楚什么是库文件。
-
首先先给一个计算机操作系统的结构图如下,便于理解库文件。
所谓库文件就是将内核预留的一些对硬件的操作的接口整合组成一些比较复杂的功能供程序编辑者进行调用的,它也是程序,但是不能执行,因为没有程序执行入口,只能被调用执行。 -
好了,知道什么是库文件了,那么静态库文件和动态库文件有什么区别呢?
静态库文件:直接被写在程序中的库文件,在程序编译的时候将所调用的库文件也编译进来,成为程序的一个整体。
动态库文件:程序之中没有包含调用的库文件,在执行程序时需要操作系统上带有所需的库文件,若没有则报错,使得程序无法执行。 -
有些抽象,举个例子,在我们安装电脑单机游戏时(比如红色警戒)。
不免会遇到这种情况,您的电脑缺少xxxx.dll文件等。这种程序就是在写程序时调用了动态库文件,但是安装游戏的电脑上没有该库文件,导致报错,解决办法就是在网上下载所需的xxxx.dll文件并放到相应的位置即可。而使用静态库文件就不会出现类似错误。 -
两类库文件各自的优缺点:
动态库文件:由于只有在程序执行时与电脑上的库文件链接,所以程序本身代码量较少,并且被调用的库文件只会在内存中保留一份,当多个进程使用该库文件时,只用保留一份在内存中即可。
缺点:不便于程序的移植,若从一台电脑移植到另一台电脑上则可能缺少相关文件。
静态库文件:由于库文件直接在程序本身之中,所以执行起来较快,移植性较好。
缺点:程序本身较大,一个进程占用一份库内存,占用内存大 -
两类库文件在各种系统中的存在:
.dll:Dynamic Link Library,windows操作系统下的动态链接库
.lib:Static Library,windows操作系统下的静态链接库
.os:Share Object,Linux操作系统下的共享库
.a:Linux操作系统下的静态链接库