动态加载:

1:灵活,可以在需要的时候用LoadLibrary进行加载,在不需要的时候用FreeLibrary进行卸载,这样可以不必占用内存。
2:可以在没有dll时候发现,而不致程序报错。
3:加载程序中有条件才运行的库。
4:热更新,在不停止程序的前提下进行更新。
5:复杂一些,需要显示获得函数地址。
6:dll没有对应的lib文件,此时只能进行动态加载。
静态加载:
1:简单方便
2:没有dll时,系统报错
3:加载运行很久的库
4:dll必需有相应的lib文件
加载方法:
1、确保有a.dll和a.lib,两个文件都有的话可以用静态加载的方式。
2、在.cpp文件中通过#pragma comment(lib, "a.lib") 加载lib,并包含相应的头文件,就可以使用dll中的函数了~

所谓"程序库",简单说,就是包含了数据和执行码的文件。其不能单独执行,可以作为其它执行程序的一部分,来完成执行功能。库的存在,可以使得程序模块化,可以加快程序的再编译,可以实现代码重用,可以使得程序便于升级。 
      程序库可分三类:静态库,共享库和动态加载库。 
      静态库,是在执行程序运行前就已经加入到执行码中,在物理上成为执行程序的一部分;共享库,是在执行程序启动时加载到执行程序中,可以被多个执行程序共享使用。动态加载库,其实并不是一种真正的库类型,应该是一种库的使用技术,应用程序可以在运行过程中随时加载和使用库。 
     建议库开发人员创建共享库,比较明显的优势在于库是独立的,便于维护和更新;而静态库的更新比较麻烦,一般不做推荐。然而,它们又各有优点,后面会讲到。在C++编程中,要使用动态加载技术,需要参考文章"C++ dlopen MINI-Howto"。

静态库可以认为是一些目标代码的集合。按照习惯,一般以".a"做为文件后缀名。使用ar(archiver)命令可以创建静态库。因为共享库有着更大的优势,静态库已经不被经常使用。但静态库使用简单,仍有使用的余地,并会一直存在。 
     静态库在应用程序生成时,可以不必再编译,节省再编译时间。但在编译器越来越快的今天,这一点似乎已不重要。如果其他开发人员要使用你的代码,而你又不想给其源码,提供静态库是一种选择。从理论上讲,应用程序使用了静态库,要比使用动态加载库速度快1-5%,但由于莫名的原因,实际上可能并非如此。由此看来,除了使用方便外,静态库可能并非一种好的选择。

转载于:https://www.cnblogs.com/loanhicks/p/7413999.html

动态加载vs静态加载相关推荐

  1. 动态加载和静态加载及其编译步骤

    在类unix操作系统中,驱动加载方式一般分为:动态加载和静态加载,下面分别对其详细论述. 一.动态加载 动态加载是将驱动模块加载到内核中,而不能放入/lib/modules/下.     在2.4内核 ...

  2. Linux动态库的动态加载与静态加载以及加载依赖了其他动态库的动态库

    Linux动态库加载 在Linux下,动态库格式一般为libxxx.so或者libxxx.so.3这种格式. 通常我们在网上下载下来源码包,编译之后会是libxxx.so软连接libxxx.so.1链 ...

  3. python 动态加载与静态加载_python中的元类、静态方法、类方法,动态添加方法...

    首先介绍几个概念: 1.#所谓的静态方法就是这个方法任何类都可以调用,程序一加载就存在的方法 2.所谓的类方法就是这个类一加载就存在的方法,不用实例化这个类就已经存在的方法 3.所谓的元类就是创建类的 ...

  4. python 动态加载与静态加载_python+django加载静态网页模板解析

    今天我们来看看Django是如何加载静态html的? 我们首先来看一看什么是静态HTML,什么是动态的HTML?二者有什么区别? 静态HTML指的是使用单纯的HTML或者结合CSS制作的包括图片.文字 ...

  5. 静态链接库(LIB)和动态链接库(DLL),DLL的静态加载和动态加载,两种LIB文件。

    静态链接库(LIB)和动态链接库(DLL),DLL的静态加载和动态加载,两种LIB文件. 一. 静态链接库(LIB,也简称"静态库")与动态链接库(DLL,也简称"动态库 ...

  6. 软件库Library之静态库\动态库和静态加载\动态加载

    软件库Library之静态库\动态库和静态加载\动态加载 动态库之导入库 https://blog.csdn.net/wallaceli1981/article/details/5740718 * 动 ...

  7. Ng-Zorro框架静态加载SVG图标

    ng-zorro-antd 是遵循 Ant Design 设计规范的 Angular UI 组件库.提供了丰富的常用页面组件.其中NzIconModule 提供了图标功能,可以方便地使用各种框架自带的 ...

  8. VC静态加载DLL和动态加载DLL

    VC静态加载DLL和动态加载DLL 1. 静态加载DLL 如果你有a.dll和a.lib,两个文件都有的话可以用静态加载的方式: message函数的声明你应该知道吧,把它的声明和下面的语句写到一个头 ...

  9. 动态(静态)加载DLL注意

    动态加载DLL的方法与注意的问题 动态加载DLL的方法: 1. 生成dll过程:把生成的.DLL文件复制到测试工程DLLTest目录下.这里假设该.DLL文件为add.dll,主要代码是: // .h ...

最新文章

  1. 从零开始在ubuntu上安装和使用k8s集群及报错解决
  2. tasker使用手册_如何开始使用Tasker调整Android手机
  3. IO多路转接模型----(select的模型,select的优缺点,poll的模型,poll的优缺点)
  4. [react] 你最不喜欢React的哪一个特性(说一个就好)?
  5. Linux 线程占用CPU过高定位分析
  6. 定积分算法java_变步长梯形积分算法求解函数定积分
  7. java怎么对作者名排序_Java 对象排序详解
  8. python编写个人信息_Python爬取个人微信朋友信息操作示例
  9. centOS7安装node+mongoDB+redis+express(forerver)+nginx+https
  10. 非计算机专业计算机教学考试,论非计算机专业的计算机教学与等级考试
  11. 软件系统服务器端要求用千兆宽带,【硬核分享】升级千兆网络而速度却达不到?这些操作你做对了吗?...
  12. 二维码是什么?java生成二维码
  13. 微信JS-SDK说明文档
  14. 双重差分法之PSM - DID
  15. Github开源项目总结
  16. 海量固定资产如何进行盘点?
  17. [转]solaris 10 使用手册
  18. Android 面试题 android中级---初级---知识点
  19. 3.Hadoop Hive服务
  20. 题解2020届天梯赛总决赛L2-4哲哲打游戏

热门文章

  1. 什么是mysql事物定义_Mysql事务原理
  2. idea for mac 控制台 mvn command not found
  3. github设置仓库可见性 私人仓库设置
  4. Spring系列(八):Spring生命周期中BeanPostProcessor接口用法介绍
  5. IDEA中安装配置Jrebel热部署插件用法笔记
  6. ASP.NET MVC ActionFilter自定义过滤器异常过滤器过滤器用法
  7. python编程第四版_清华编程教授强力推荐《Python编程》,指导你如何学习python
  8. 能让你少写1000行代码的20个正则表达式
  9. Windows下Mysql 的安装和卸载
  10. 【课后服务】20181022切蛋糕