关于静态链接库(LIB)和动态链接库(DLL)的理解

时间:2022-07-01 09:41:32

    .lib文件一般情况下有两种情况。其一:就是一般的静态链接库,它将各个目标文件(.obj)、运行时函数库(.lib)、已经编译的资源文件(.res)链接到一起,形成一个可执行文件(.exe)。在可执行文件里包含了程序运行需要的所有函数和资源等等,可执行文件自己就可以装B自己飞,但是它的大小就会很大,并且当有多个程序对它进行使用时,内存里就会放置和程序同数量的文件副本,占用内存空间了。     其二:导入库,导入库里没有程序代码,相应的,它里面只有链接信息,帮助应用程序在可执行文件中建立起对应于动态链接库的重定向表。其实说白了,它就是一个索引,一个dll动态链接库的索引表。所以在可执行文件里它是没有函数代码和资源的,有的就是索引表,没有办法自己飞,应该需要和dll文件一起吧,不过虽然如果有多个程序使用它,在内存会有多个副本,但是只是索引表,就相对而言不会太占内存吧。

    .dll文件,使用同一个dll的进程们在运行时共享DLL的代码,在内存中只能放一个,不管有几个程序调用它,都只会有一个。(我不知道这么理解对不对???)


动态链接与静态链接的不同之处在于它允许可执行模块(.dll 文件或 .exe 文件)仅包含在运行时定位 DLL 函数的可执行代码所需的信息。在静态链接中,链接器从静态链接库获取所有被引用的函数,并将库同代码一起放到可执行文件中。


静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了。但是若使用 DLL,该 DLL 不必被包含在最终 EXE 文件中,EXE 文件执行时可以“动态”地引用和卸载这个与 EXE 独立的 DLL 文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。


大部分 DLL 主要是为 C  C++ 程序员编写和整理说明的