静态链接库和动态链接库的区别

  1. 库是写好的、现有的、成熟的、可以复用的代码。
  2. 一个程序编译成可执行程序的步骤:
    静态链接库和动态链接库的区别
  3. 静态库
    在链接阶段,会将汇编生成的目标文件.o 与引用到的库一起链接打包到可执行文件中。
    静态库对函数库的链接是在编译时期完成的。
    程序运行时与函数库再无瓜葛,移植方便。
    浪费空间和资源,因为所有相关的目标文件与有关的函数库都被链接成一个可执行文件。
    静态库对程序的更新、部署和发布会带来麻烦。一个静态库更新,所有用它的程序都需要重新编译。
  4. 动态库
    动态库把对一些库函数的链接载入推迟到程序运行的时期。
    可以实现进程之间的资源共享。
    程序升级变得简单。
  5. 多个进程共享动态链接库的原理
    通常来说动态链接库是不能够直接运行,也不能直接接收消息的,他们是一些独立的文件(后缀名一般为.dll,当然还有其它的一些后缀名也是可以的),其中包含能被可执行程序或其它DLL调用来完成某项工作的函数,也就是说动态链接库也就是由一些函数组成而已。并且只有在其它模块调用动态链接库中的函数时,动态链接库才发挥作用,在实际的编程中,通常可以完成某种功能的函数放在一个动态链接库中,然后提供给其它函数调用。当这个访问了的动态链接库的进程被加载时,系统会为这个进程分配4GB的私有地址空间(如果是32位机的话),然后系统就会分析这个可执行模块,找到这个可执行模块中将所要调用的DLL,然后系统就负责搜索这些DLL找到这些DLL后便将这些DLL加载到内存中,并为他们分配虚拟内存空间,最后将DLL的页面映射到调用进程的地址空间汇总,DLL的虚拟内存有代码页和数据页,他们被分别映射到进程A的代码页面和数据页面,如果这时进程B也启动了,并且进程B也许要访问该DLL,这时,只需要将该DLL在虚拟内存中的代码页面和数据页面映射到第二个进程的地址空间即可。这也表明了在内存中,只需要存在一份DLL的代码和数据。

参考链接:
https://blog.****.net/benpaobagzb/article/details/50070427