基于VS平台的库生成与使用

基于VS平台的库生成与使用

动态库的创建连接参考链接:https://www.cnblogs.com/codingmengmeng/p/6287425.html
静态库的创建连接参考链接:https://www.cnblogs.com/zqh20145320/p/6772985.html
静态库&动态库参考链接:https://blog.csdn.net/roy_xing/article/details/90372477

动态库创建与使用:

创建动态库:
1.创建win32项目,应用程序设置为DLL类型
2.添加新项:.h文件和.cpp文件
3.生成解决方案,生成了.dll文件和.lib文件

使用创建的动态库:
1.新建win32控制台应用程序
2.创建一个名为lib的文件夹,将动态库中的.lib文件拷贝过来
3.将动态库中的.dll文件放进debug文件夹中
4.配置:配置好头文件的位置(见包含目录)、引导库位置(见库目录)及其名字(见附 加依赖项)
5.配置完成,运行即可。

.h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的。
附加依赖项添加的是.lib而不是.dll,若生成了DLL,则肯定也生成了LIB文件。

.h .lib .dll三者的关系:
H文件的作用:声明函数接口
DLL文件作用:函数可执行代码
LIB文件作用:附加依赖项.LIB文件,它起到桥梁的作用。当 我们在自己的程序中引用了一个H文件里的函数,链接器怎么知道该调用哪个DLL文件呢?这就是LIB文件的作用了。它告诉链接器调用的函数在哪个DLL中,函数执行代码在DLL中的什么位置,

静态库创建与使用:

创建静态库:
1.创建win32项目,应用程序设置为静态类型
2.添加新项:.h文件和.cpp文件
3.生成解决方案,生成了.dll文件和.lib文件

使用创建的静态库:
1.创建w32控制台应用程序。
2.将创建静态库工程中的头文件(.h)文件和静态库.lib文件拷到我们刚刚创建的这个w32应用程序工程文件目录下。
3.右键 “目录” “属性” 选择 “链接器” -> “输入”,在“附加依赖项” 这里添加要调用的lib文件的名字:例如XXX.lib

在VC中加载LIB文件的几种方法:
LIB文件直接加入到工程文件列表中 :
  在VC中打开File View一页,选中工程名,单击鼠标右键,然后选中"Add Files to Project"菜单,在弹出的文件对话框中选中要加入DLL的LIB文件即可。
设置工程的 Project Settings来加载DLL的LIB文件。
通过程序代码的方式 :
  加入预编译指令 #pragma comment (lib,"*.lib"),这种方法优点是可以利用条件预编译指令。
 
  链接不同版本的LIB文件。因为,在Debug方式下,产生的LIB文件是Debug版本,如Regd.lib;
  在Release方式下,产生的LIB文件是Release版本,如Regr.lib。
  当应用程序对DLL的LIB文件加载后,还需要把DLL对应的头文件(*.h)包含到其中,在这个头文件中给出了DLL中定义的函数原型,然后声明。

何为静态库、静态链接:
  静态库在链接阶段,会将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件中。因此对应的链接方式称为静态链接

动态链接库的优缺点:
  因为动态链接库是将功能封装在一起的模块,因此,与将代码直接写入调用模块中相比,它不仅可以提高程序的复用,减少代码开发工作量,同时使得功能更新更方便。除了这些模块化带来的优点外,动态链接库的工作方式也决定了它先天具有比静态链接更多的优点,如下所述。
1、节约内存和减少交换:当应用程序使用动态链接时,多个进程可以同步使用一个DLL共享内存中DLL的单个副本。相比之下,当应用程序使用静态链接库时,Windows必须为每个应用程序装载一个库代码的副本到内存中。
2、节约磁盘空间:当应用程序使用动态链接时,多个应用程序可以共享磁盘上单个DLL副本。相比之下,当应用程序使用静态链接库时,每个应用程序要将库代码作为独立的副本链接到可执行镜像中。
3、当DLL中的函数修改时,只要函数参数、调用规定和返回值没有改变,使用DLL的应用程序不需要重新编译或链接。而静态链接的函数改变时,需要应用程序重新链接。
4、支持多语言编程:只要应用程序遵循相同的调用规范,则使用不同编程语言编写的程序可以调用相同的DLL函数。程序和DLL函数必须兼容:函数定义的参数入栈顺序,函数或应用程序谁来负责清理堆栈,参数是否传入寄存器中等方面必须兼容。
5、轻松的创建中间版本:通过将资源放入DLL中,使得创建应用程序的中间版本非常简单。如可以将应用程序的每个语言版本的字符串放到单独的一个资源DLL中,并为不同的语言版本装载合适的资源DLL就可以了。
虽然使用DLL有诸多的优点,但是也需要格外注意使用DLL的缺点。即调用DLL的应用程序不是独立的,程序的 运行依赖于所使用的DLL是否存在。

静态库的优缺点:
1.空间浪费是静态库的一个问题。
2.另一个问题是静态库对程序的更新、部署带来麻烦。如果静态库liba.lib更新了,所以使用它的应用程序都需要重新编译、发布给用户 。

静态库和动态库的区别:
1.静态库在程序编译时会链接到目标代码中,程序运行时不需要静态库,因为体积比较大。而且每次编译时都需要载入静态代码,因此开销大。
2.动态库在程序编译时不会被链接到目标代码中,而是在程序运行时才被载入,程序运行时需要动态库存在,因此体积比较小。而且系统只需要载入一次动态库,不同程序可以得到内存中相同的动态库副本,因此内存开销小。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值