前言
在c/c++
语言编译时 我们经常能碰到关于静态库(static)和动态库(shared)的链接
那它们有什么区别呢
静态库
静态库(static)是程序在编译期间进行链接的, 它会被打包进可执行程序当中
动态库
动态库(shared)也叫共享库, 它是在程序运行是进行链接的, 以独立的文件存在, 不会被打包进可执行程序中, 但是程序在执行时需要能找到这个库的具体位置, 否则程序可能出错
不同系统中动态库的文件类型
系统 | 动态库后缀 | 静态库后缀 |
---|---|---|
Linux | .so | .a |
Mac | .dylib | .a |
Windows | .dll | .lib |
两种库的优势和劣势
静态库
优势:
- 将依赖的静态库直接打包进可执行文件中, 不用担心对方的机器找不到库导致无法运行
- 由于直接嵌入到了执行程序中 因此运行速度较快
劣势:
- 会导致可执行文件的体积过大
- 如果多个程序使用了同一个静态库 一旦静态库出现bug, 那么与之相关的所有可执行程序都要进行重新编译
动态库
优势:
- 能有效减少可执行程序的体积
- 一旦库出现
bug
, 只需修复并重新编译库即可
劣势:
- 需要将库放到指定路径下 供主程序调用 操作起来相对麻烦
- 运行速度相对静态库会慢一些
总结
静态库和动态库, 没有孰优孰劣一说, 具体看实际的应用场景, 每种库都有它的用武之地
本文为作者原创转载时请注明出处 谢谢