当前位置:网站首页 > 编程语言 > 正文

静态库和动态库的基本含义(静态库和动态库的优缺点)




库的名称:去掉前面的 去掉后面的 剩下的,才是库正真的名称。

查看文件依赖库:


在这里插入图片描述
step1:预编译,使用预编译器去处理 C/C++ 源文件中头文件、宏定义等。
step2:编译,使用编译器对处理后的 C/C++ 源文件进行源码编译生成 .o 对象文件。
step3:链接,使用链接器将编译生成的 .o 对象文件进行完整链接生成最终的可执行文件。

这里的 .a.so 就是静态库和动态库,他们会在链接阶段被使用。

通常我们使用的一些第三方 C/C++ 库以及系统库,都是通过静态库或者动态库的方式提供,这两者的区别在于:

  • 静态库:链接后会直接把里面所有的代码都合并生成到可执行程序中。
  • 动态库:链接后仅仅将动态库中导出的函数提供给可执行程序调用,实际运行过程中,还是会单独加载这个动态库。

 

r : replace (更新替换)

c:create (建立)


  1. 使用 创建 文件
  • (PIC)position ignoring code 与位置无关码
 
  1. 用 打包 文件
  • -shared 共享库 / 动态库
 

当我们有了一个库,接下来,要将库引入我们的项目,必须要让编译器找到 库 和 头文件

  • 需要指定的 头文件 和 库文件
  • 如果没有默认安装到系统 gcc、g++ 默认的搜索路径下,用户必须指明对应的选项,告知编译器:
    • 头文件在哪里
    • 库文件在哪里
    • 库文件具体是谁
  • 如果我们下载下来的库和头文件,拷贝到系统默认路径下,就叫做,在 Linux 下安装库
  • 如果我们安装的库是第三方的(语言、操作系统系统接口就是第一方和第二方)库,我们要正要使用,即使是全部都安装到了系统中,gcc 和 g++ 都必须使用 来指明具体库的名称
 

:后接 的路径(可以用 ),可以带空格也可以不带空格,
:后接 头文件 的路径(可以用 ),可以带空格也可以不带空格,
:后接 链接的 库名(去头去尾),可以带空格也可以不带空格

注意:静态链接形成的可执行程序,本身就有静态库中对方法的实现。 也就是说使用静态链接注定 会占用更多的资源。占用哪些资源呢?磁盘、可执行程序体积变大加载占用内存、下载周期变长、占用网络资源


使用静态库的方法,让我们把路径和名称给了编译器,OS 可以通过链接原则,即,将用户使用的二进制代码直接拷贝到目标可执行程序中。

但动态库不是这样的。还需要将 文件放到系统的默认路径下,才能被 OS 找到。

运行时,OS 查到动态库的方法:

  1. 环境变量:向 中添加库所在的路径
    这是一个临时方案,此方法重启机器就无效了
  2. 在 或 下创建第三方库的 软链接
 
  1. 在系统路径 中 添加配置文件,写入 第三方库的路径
 

只要我们把库加载到了内存,映射到进程的地址空间(共享区)中之后,我们的代码执行库中的方法时,就依旧还是在自己的地址空间内进行函数跳转即可。

不管有多少进程,动态库只会加载一份,是很节省资源的。

库中的地址,怎么理解?

动态库中的所有地址都是偏移量,默认从 0 开始。

当一个库,真正的被映射进地址空间的时候,它的起始地址才能真正确定。所以我们调用动态库的时候,选取地址的方法是:该进制中这个库真正的起始地址 + 调用方法的偏移量。如此一来,库就可以在进程的地址空间中随便加载,与我们具体加载到地址空间的什么位置就毫无关系了。

  1. 动态库和静态库同时存在时,系统默认采用动态链接

需要连接静态则,需要给出参数

 
  1. 编译器,在链接的时候,如果提供的库既有动态又有静态,优先采用动态链接。如果只有静态的话,直接静态链接。
  2. 静态的库删了不影响可执行程序运行,而动态的少了就不能跑了。
  3. 云服务器一般只有动态库,静态库需要自己安装

c 的静态库

 

c++ 的静态库

到此这篇静态库和动态库的基本含义(静态库和动态库的优缺点)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!
                            

版权声明


相关文章:

  • vs怎么调试(vs怎么调试代码)2025-03-22 07:18:05
  • libxml2.dll(libxml2.dll,无法继续执行代码)2025-03-22 07:18:05
  • 单片机程序编写代码(单片机如何编写程序)2025-03-22 07:18:05
  • 网页聊天平台(聊天 网页)2025-03-22 07:18:05
  • 操作系统基本作用(操作系统基本作用有哪些)2025-03-22 07:18:05
  • 结构游戏的分类ppt(结构游戏的分类及技巧有哪些)2025-03-22 07:18:05
  • 爱普生c7000参数(爱普生 v700)2025-03-22 07:18:05
  • ip域名提取查询 apk(ip域名批量提取查询app)2025-03-22 07:18:05
  • 华为机考题库2023材料类(华为机考2020)2025-03-22 07:18:05
  • 打开目录命令(文件打开目录)2025-03-22 07:18:05
  • 全屏图片