- Published on
静态库与动态库
- Authors

- Name
- Vegetog
| 特性 (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 环境下的全局符号覆盖。 |