C语言中静态库static和动态库shared的区别

前言

c/c++语言编译时 我们经常能碰到关于静态库(static)和动态库(shared)的链接

那它们有什么区别呢

静态库

静态库(static)是程序在编译期间进行链接的, 它会被打包进可执行程序当中

动态库

动态库(shared)也叫共享库, 它是在程序运行是进行链接的, 以独立的文件存在, 不会被打包进可执行程序中, 但是程序在执行时需要能找到这个库的具体位置, 否则程序可能出错

不同系统中动态库的文件类型

系统 动态库后缀 静态库后缀
Linux .so .a
Mac .dylib .a
Windows .dll .lib

两种库的优势和劣势

静态库

优势:

  • 将依赖的静态库直接打包进可执行文件中, 不用担心对方的机器找不到库导致无法运行
  • 由于直接嵌入到了执行程序中 因此运行速度较快

劣势:

  • 会导致可执行文件的体积过大
  • 如果多个程序使用了同一个静态库 一旦静态库出现bug, 那么与之相关的所有可执行程序都要进行重新编译

动态库

优势:

  • 能有效减少可执行程序的体积
  • 一旦库出现bug, 只需修复并重新编译库即可

劣势:

  • 需要将库放到指定路径下 供主程序调用 操作起来相对麻烦
  • 运行速度相对静态库会慢一些

总结

静态库和动态库, 没有孰优孰劣一说, 具体看实际的应用场景, 每种库都有它的用武之地

本文为作者原创转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

0%