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

静态库和动态库的缺点(静态库和动态库的概念)



1.1 库的概念

在我看来,库是已经写好的、成熟的、可复用的代码。每个程序都需要依赖很多底层库,不可能每个人的代码从零开始编写代码,因此库的存在具有非常重要的意义。

在我们的开发的应用中经常有一些公共代码是需要反复使用的,就把这些代码编译为库文件。

库可以简单看成一组目标文件的集合,将这些目标文件经过压缩打包之后形成的一个文件。像在Windows这样的平台上,最常用的c语言库是由集成按开发环境所附带的运行库,这些库一般由编译厂商提供。

1.2 vs下静态库创建和使用

1.2.1 静态库的创建

1. 创建一个新项目,在已安装的模板中选择“常规”,在右边的类型下选择“空项目”,在名称和解决方案名称中输入staticlib。点击确定。

2.在解决方案资源管理器的头文件中添加,mylib.h文件,在源文件添加mylib.c文件(即实现文件)。

3.在mylib.h文件中添加如下代码:

4.在mylib.c文件中添加如下代码:

5. 配置项目属性。因为这是一个静态链接库,所以应在项目属性的“配置属性”下选择“常规”,在其下的配置类型中选择“静态库(.lib)。

6.编译生成新的解决方案,在Debug文件夹下会得到mylib.lib (对象文件库),将该.lib文件和相应头文件给用户,用户就可以使用该库里的函数了。

1.2.2 静态库的使用

方法一:配置项目属性

方法二:使用编译语句

方法三:添加工程中

1.2.3 静态库优缺点

内存和磁盘空间

静态链接这种方法很简单,原理上也很容易理解,在操作系统和硬件不发达的早期,绝大部门系统采用这种方案。随着计算机软件的发展,这种方法的缺点很快暴露出来,那就是静态链接的方式对于计算机内存和磁盘空间浪费非常严重。特别是多进程操作系统下,静态链接极大的浪费了内存空间。在现在的linux系统中,一个普通程序会用到c语言静态库至少在1MB以上,那么如果磁盘中有2000个这样的程序,就要浪费将近2GB的磁盘空间。

程序开发和发布

空间浪费是静态链接的一个问题,另一个问题是静态链接对程序的更新、部署和发布也会带来很多麻烦。比如程序中所使用的mylib.lib是由一个第三方厂商提供的,当该厂商更新容量mylib.lib的时候,那么我们的程序就要拿到最新版的mylib.lib,然后将其重新编译链接后,将新的程序整个发布给用户。这样的做缺点很明显,即一旦程序中有任何模块更新,整个程序就要重新编译链接、发布给用户,用户要重新安装整个程序。

1.3 vs下动态库创建和使用

要解决空间浪费和更新困难这两个问题,最简单的办法就是把程序的模块相互分割开来,形成独立的文件,而不是将他们静态的链接在一起。简单地讲,就是不对哪些组成程序的目标程序进行链接,等程序运行的时候才进行链接。也就是说,把整个链接过程推迟到了运行时再进行,这就是动态链接的基本思想。

1.3.1 动态库的创建

1. 创建一个新项目,在已安装的模板中选择“常规”,在右边的类型下选择“空项目”,在名称和解决方案名称中输入mydll。点击确定。

2.在解决方案资源管理器的头文件中添加,mydll.h文件,在源文件添加mydll.c文件(即实现文件)。

3.在test.h文件中添加如下代码:

5.在test.c文件中添加如下代码:

5. 配置项目属性。因为这是一个动态链接库,所以应在项目属性的“配置属性”下选择“常规”,在其下的配置类型中选择“动态库(.dll)。

6.编译生成新的解决方案,在Debug文件夹下会得到mydll.dll (对象文件库),将该.dll文件、.lib文件和相应头文件给用户,用户就可以使用该库里的函数了。

1.3.2 动态库的使用

方法一:隐式调用

方法二:显式调用

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

版权声明


相关文章:

  • 780t风扇调速怎么接(风扇调速怎么接线)2025-06-27 16:00:04
  • modbus报文解析10号功能码(modbus16功能码的报文组织)2025-06-27 16:00:04
  • 485协议代码(485接口协议)2025-06-27 16:00:04
  • kubelet日志文件存在哪里(kubelet配置文件位置)2025-06-27 16:00:04
  • 华为模拟器ensp怎么安装(华为模拟器ensp配置命令)2025-06-27 16:00:04
  • 卡巴斯基设置(卡巴斯基设置白名单)2025-06-27 16:00:04
  • 反激式开关电源占空比为什么要小于50(反激式开关电源占空比为什么要小于500)2025-06-27 16:00:04
  • 字体图标库使用(字体图标的优势和劣势)2025-06-27 16:00:04
  • xvwiv是什么牌子(vvdiv是什么品牌)2025-06-27 16:00:04
  • seated做非谓语(seated非谓语动词)2025-06-27 16:00:04
  • 全屏图片