C++ 静态库和动态库的区别

库是C++中的函数集合, 用于存放共享代码的

C++的库分为静态库和动态库, 动态库将函数的声明和实现分开成两部分, 分别存放在了两个文件中

而C++的函数声明就存放在了 lib 文件中, 如果是静态库的话 lib 文件还会存放函数的代码本身和函数的实现, 如果是动态库的话, 函数的实现会被存放在dll 文件中

lib 文件在编译的时候需要和程序的源文件一起编译, 而 dll 在编译的时候不需要, 不过在程序运行的时候需要 dll 的帮助

Linux下的.so和.a文件是什么

相当于是win下的lib和dll文件

各自的特点

  • 静态库 (.a .lib)
    • 特点
      • 1. 静态库对函数库的链接是放在编译时期完成的
      • 2. 程序在运行时与函数库再无瓜葛,移植方便。
      • 3. 浪费空间和资源,因为所有相关的目标文件与牵涉到的函数库被链接合成一个可执行文件
      • 4. 如果静态库进行更新则应用该库的所有程序都需要重新编译(全量更新)
  • 动态库 (.so .dll )
    • 特点
      • 1. 动态库把对一些库函数的链接载入推迟到程序运行时期。
      • 2. 可以实现进程之间的资源共享。(因此动态库也称为共享库)
      • 3. 将一些程序升级变得简单。
      • 4. 甚至可以真正做到链接载入完全由程序员在程序代码中控制(显式调用)

区别

  • 1. 链接时期区别
    • 动态库在运行的时候连接, 静态库在编译时连接, 在连接时拷贝
  • 2. 使用资源上
    • 静态库在每次使用的时候都会将全部的库链接进可执行文件, 比较浪费资源
    • 动态库在使用的时候访问动态库中函数, 比较节省资源
  • 3. 更新升级上
    • 静态库更新,则每个使用该静态库的程序都需要更新,不易于更新升级
    • 动态库仅更新自身,易于更新升级
  • 4. 包含其他库
    • 静态链接库不能再包含其他动态链接库
    • 动态链接库可以包含其他动态链接库
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
静态库(Static Library)和动态库(Dynamic Library)是两种常见的库文件形式,它们在编程中有一些区别。 1. 链接方式: - 静态库在编译链接时会被完整地复制到可执行文件中,编译后的可执行文件不再依赖于静态库的存在。静态库适合用于独立的、可移植的程序。 - 动态库在编译链接时只会在可执行文件中保留对库的引用,真正的库文件会在程序运行时动态加载到内存中。动态库可以被多个程序共享,减少了重复代码的冗余。 2. 文件大小: - 静态库会使可执行文件变大,因为它会完整地复制到可执行文件中。 - 动态库相对较小,因为它只是被引用,并不会复制到可执行文件中。 3. 更新与发布: - 静态库如果更新了,需要重新编译链接可执行文件。 - 动态库可以独立更新,不需要重新编译可执行文件。 4. 内存占用: - 静态库在程序加载时,会将整个库文件加载到内存中,占用较多的内存空间。 - 动态库在程序运行时才会加载到内存中,可以多个程序共享使用,节省内存空间。 5. 运行效率: - 静态库的函数调用是直接的,因此调用效率较高。 - 动态库的函数调用需要通过一定的中间层,因此调用效率相对较低。 根据实际需求,可以选择使用静态库动态库静态库适合独立的、可移植的程序,而动态库适合共享使用、灵活更新的程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值