面试官:
请你介绍一下静态链接库和动态链接库,它们的区别和特点是什么?

应聘者回答参考:

1. 库的基本概念

  • :是已经写好、编译好的、可复用的代码集合,以二进制形式存在,可以被操作系统加载执行。
  • 意义:避免所有程序都从零开发,大幅提高开发效率。
  • 分类
    • 静态库(Windows:.lib,Linux:.a
    • 动态库(Windows:.dll,Linux:.so

2. 静态库(Static Library)

  • 定义:静态库在 链接阶段 被复制进可执行文件中。
  • 实现方式:链接器从库文件中取出所需目标代码,直接打包进最终的可执行文件。
  • 本质:一个静态库就是一组目标文件(.o/.obj)的集合。
  • 特点总结
    1. 链接时机:编译期完成链接。
    2. 运行时独立性:运行时不依赖库文件,移植方便。
    3. 缺点
      • 空间浪费:不同程序使用相同库时,每个可执行文件中都有一份拷贝。
      • 更新麻烦:库文件更新后,所有依赖该库的应用都要重新编译、发布。

3. 动态库(Dynamic Library)

  • 定义:动态库在 程序运行时 才被加载到内存中。
  • 实现方式:可执行文件只保存对库的引用,真正的代码在运行时由操作系统加载进内存。
  • 特点总结
    1. 链接时机:推迟到运行时再完成。
    2. 共享性:多个进程可共享同一份库副本,节省内存。
    3. 更新灵活:只需替换库文件即可实现增量更新,无需重新编译整个程序。
    4. 缺点
      • 运行时依赖库文件,若缺少对应 .so/.dll 会导致程序无法启动。
      • 加载和解析会带来轻微性能损耗。

4. 开发工具中的表现

  • 静态库:在 VS 中新建静态库工程,编译后生成 .lib 文件。
  • 动态库:在 VS 中新建动态库工程,编译后生成 .lib(导入库)和 .dll(实际动态库)。

5. 对比总结

特性 静态库(.a / .lib) 动态库(.so / .dll)
链接时机 编译期 程序运行期
文件大小 较大(包含库代码) 较小(只保存符号引用)
内存占用 多份拷贝 多进程共享一份
更新维护 需重新编译应用程序 替换库文件即可
运行速度 快(直接执行) 略慢(运行时加载)
发布方式 只需发布一个可执行文件 需随程序发布库文件

总结

  • 静态库:适合对性能要求高、不常更新的应用(如嵌入式开发)。
  • 动态库:适合频繁更新、多个程序共享同一套代码的场景(如操作系统 API、第三方 SDK)。

😀 关注 @公众号 程序员陈子青,获取更多 C++ 技术支持。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐