1.动态链接库(Dynamic Link Library,简称DLL)
动态链接库是一种可以在程序运行时加载和使用的共享代码库。与静态链接库不同,动态链接库在编译时并不被嵌入到可执行文件中,而是在程序运行时由操作系统动态加载到内存中。
动态链接库的常见扩展名
- Windows:
.dll
(Dynamic Link Library) - Linux:
.so
(Shared Object) - macOS:
.dylib
(Dynamic Library) - 通用:
.dll
、.so
、.dylib
、.sl
(Solaris)
2.静态链接库(Static Link Library)
静态链接库是一种在编译时将库代码直接嵌入到可执行文件中的库文件。与动态链接库不同,静态链接库的代码在程序构建阶段就被完整地合并到最终的可执行文件中,程序运行时不再依赖外部的库文件。静态库不可跨平台,与编译它的操作系统和CPU架构绑定。例如,Windows的.lib
文件无法在Linux下使用。
静态链接库的格式
操作系统 | 静态库扩展名 | 说明 |
---|---|---|
Windows | .lib | Microsoft静态库格式 |
Linux/Unix | .a (Archive) | 通过ar 工具打包的目标文件集合 |
macOS | .a 或 .framework | 静态库或框架包 |
静态链接 vs. 动态链接对比
维度 | 静态链接库 | 动态链接库 |
---|---|---|
链接时机 | 编译时 | 运行时 |
文件体积 | 大(包含库代码) | 小(仅存库引用) |
内存占用 | 高(多进程重复加载库副本) | 低(多进程共享同一库) |
更新维护 | 需重新编译程序 | 替换库文件即可 |
依赖管理 | 无依赖 | 需确保库版本兼容 |
适用场景 | 嵌入式、独立工具、避免依赖问题 | 大型应用、插件系统、资源共享 |