Published on

静态库与动态库

Authors
  • avatar
    Name
    Vegetog
    Twitter
特性 (Feature)静态库 (Static Library)动态库 (Dynamic Library)
Windows 后缀.lib.dll (及配套的 .lib 导入库)
Linux 后缀.a (Archive).so (Shared Object)
macOS 后缀.a.dylib
链接阶段链接时 (Link time) :代码被完整复制到可执行文件中。运行时 (Runtime) :程序启动或运行中才加载库代码。
程序体积较大:每个调用库的程序都包含一份副本。较小:可执行文件只包含必要的符号引用。
内存占用较高:多个进程运行时,内存中有多个副本。较低:多个进程可共享物理内存中的同一份库代码。
部署分发简单:只需分发单个 .exe,不依赖外部库文件。复杂:需携带 .dll/.so 文件,易出现“找不到库”报错。
更新维护困难:库更新后,整个程序必须重新编译和链接。方便:只需替换库文件即可更新功能(需接口兼容)。
运行效率略高:直接调用,无额外的寻址或跳转开销。略低:存在通过延迟绑定 (Lazy Binding) 导致的开销。
符号冲突较少发生,由链接器在编译阶段解决。较易发生,尤其是在 Linux 环境下的全局符号覆盖。