动态链接库和静态链接库
特性静态库(.a / .lib)动态库(.so / .dll)链接时机编译期程序运行期文件大小较大(包含库代码)较小(只保存符号引用)内存占用多份拷贝多进程共享一份更新维护需重新编译应用程序替换库文件即可运行速度快(直接执行)略慢(运行时加载)发布方式只需发布一个可执行文件需随程序发布库文件总结静态库:适合对性能要求高、不常更新的应用(如嵌入式开发)。动态库:适合频繁更新、多个程序共享同一套代码的
·
面试官:
请你介绍一下静态链接库和动态链接库,它们的区别和特点是什么?
应聘者回答参考:
1. 库的基本概念
- 库:是已经写好、编译好的、可复用的代码集合,以二进制形式存在,可以被操作系统加载执行。
- 意义:避免所有程序都从零开发,大幅提高开发效率。
- 分类:
- 静态库(Windows:
.lib,Linux:.a) - 动态库(Windows:
.dll,Linux:.so)
- 静态库(Windows:
2. 静态库(Static Library)
- 定义:静态库在 链接阶段 被复制进可执行文件中。
- 实现方式:链接器从库文件中取出所需目标代码,直接打包进最终的可执行文件。
- 本质:一个静态库就是一组目标文件(
.o/.obj)的集合。 - 特点总结:
- 链接时机:编译期完成链接。
- 运行时独立性:运行时不依赖库文件,移植方便。
- 缺点:
- 空间浪费:不同程序使用相同库时,每个可执行文件中都有一份拷贝。
- 更新麻烦:库文件更新后,所有依赖该库的应用都要重新编译、发布。
3. 动态库(Dynamic Library)
- 定义:动态库在 程序运行时 才被加载到内存中。
- 实现方式:可执行文件只保存对库的引用,真正的代码在运行时由操作系统加载进内存。
- 特点总结:
- 链接时机:推迟到运行时再完成。
- 共享性:多个进程可共享同一份库副本,节省内存。
- 更新灵活:只需替换库文件即可实现增量更新,无需重新编译整个程序。
- 缺点:
- 运行时依赖库文件,若缺少对应
.so/.dll会导致程序无法启动。 - 加载和解析会带来轻微性能损耗。
- 运行时依赖库文件,若缺少对应
4. 开发工具中的表现
- 静态库:在 VS 中新建静态库工程,编译后生成
.lib文件。 - 动态库:在 VS 中新建动态库工程,编译后生成
.lib(导入库)和.dll(实际动态库)。
5. 对比总结
| 特性 | 静态库(.a / .lib) | 动态库(.so / .dll) |
|---|---|---|
| 链接时机 | 编译期 | 程序运行期 |
| 文件大小 | 较大(包含库代码) | 较小(只保存符号引用) |
| 内存占用 | 多份拷贝 | 多进程共享一份 |
| 更新维护 | 需重新编译应用程序 | 替换库文件即可 |
| 运行速度 | 快(直接执行) | 略慢(运行时加载) |
| 发布方式 | 只需发布一个可执行文件 | 需随程序发布库文件 |
总结:
- 静态库:适合对性能要求高、不常更新的应用(如嵌入式开发)。
- 动态库:适合频繁更新、多个程序共享同一套代码的场景(如操作系统 API、第三方 SDK)。
😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。
更多推荐



所有评论(0)