静态库:函数和数据被编译进一个二进制文件,通常扩展名为.lib,在使用静态库的情况下,在编译链接可执行文件时,链接器从库中复制这些函数和数据并把它们和应用程序的其它模块组合起来创建最终的可执行文件。

动态库:往往提供2个文件,一个是引入库和一个DLL,引入库包含被DLL导出的函数和变量的符号名,DLL包含实际的函数和数据。在编译链接可执行文件时,只需要链接引入库,DLL中的函数代码和数据并不复制到可执行文件中,在运行的时候,再去加载DLL,访问DLL中导出的函数。

使用DLL的好处:1.可以采用多种编程语言来编写;2.增强产品的功能;3.提供二次开发的平台;4.简化项目管理,同时进行开发;5.可以节省磁盘空间和内存,多个程序使用同一种资源;6.有助于资源的共享;7.有助于实现应用程序的本地化。

动态链接库的加载两种方式:

隐式链接:

①新建DLL的程序,在里面新建加法和减法两个函数;

编译后打开工程下的DEBUG文件夹,可以看到生成的dll文件;

打开Cmd命令床开,切换到此路径下(复制文件路径,在命令窗口里右键即粘贴),输入dumpbin -exports Dll1.dll,可以看到该DLL导出的信息,如果dumpbin命令不识别,需要添加环境变量(我的安装路径是:C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.23.28105\bin\Hostx64\x64)

我们重新回到代码中,在每个函数名前增加_declspec(dllexport),再重新编译生成,发现生成的文件中多了一个Dll1.lib文件,这就是前面说的引入库文件;

接着再重新运行cmd命令,可以看到我们导出的函数信息,因为c++具有重载功能,所以函数命名会按编译器内部标识的一堆符号显示。

测试一下结果:重新新建C++控制台程序,调用Add和Sub函数,在属性里附加库依赖项加入Dll1.lib,并把文件(Dll1.lib和Dll1.dll)复制到该目录下;

红色圈起来的是表明函数在外部定义,第一种效率比下面的高。

同样可以使用dumpbin查看测试程序的输入文件信息

最新文章

  1. MSSQL 查询表空间
  2. Xperf Basics: Recording a Trace(转)
  3. 这一路走来,冷暖自知 (附算法demos)
  4. HTML5和CSS3的能量究竟是怎样的?
  5. ASP.NET中的事件处理
  6. autoscan; aclocal; autoconf; automake --add-missing; ./configure; make
  7. CROSS APPLY vs OUTER APPLY
  8. 局域网接入Internet
  9. CSS实现图片在div a标签中水平垂直居中
  10. 深入学习sea.js
  11. init.rc语法介绍
  12. winfrom 实现条形码批量打印以及将条形码信息生成PDF文件
  13. JAVAscript学习笔记 js句柄监听事件 第四节 (原创) 参考js使用表
  14. [POI2016]Nim z utrudnieniem
  15. Zookeeper简介和安装(二)
  16. 第16次CCF CSP认证-第5题-317 号子任务(subtask317)-图论最短路径
  17. getprop从哪获取属性
  18. 如何实现javascript js 类命名空间的写法
  19. IC卡制作常识概述
  20. easyui学习笔记10—手风琴格子始终展开和多个格子展开

热门文章

  1. python 学员管理系统
  2. loadrunner通过socket测接口
  3. Opengl-法线贴图(用来细化表面的表现表现的凹凸)
  4. 如何正确的hook方法objc_msgSend · jmpews
  5. Redis(2)——跳跃表
  6. 怎样解决使用feof()函数时出现的问题?
  7. C++泛化双端队列
  8. Ubuntu中VMware tools的安装步骤
  9. linux yum安装MySQL5.6
  10. 教你高效使用数据可视化BI软件创建医院卫生耗材运营监控大屏