C++中动态库(.dll)和静态库(.lib)

最近,做一些程序的封装,就了解了C++中封装动态库(.dll)和静态库(.lib)的方法,以及两种库调用时异同,现在记录下,后续有新的理解,会继续更新;

动态库(.dll):动态库又称动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL 还有助于共享数据和资源。多个应用程序可同时访问内存中单个DLL 副本的内容。DLL 是一个包含可由多个程序同时使用的代码和数据的库。Windows下动态库为.dll后缀,在linux在为.so后缀。(引自百度百科)

静态库(.lib):静态库是指在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中的这种库。(引自百度百科)

区别:静态库和动态库是两种共享程序代码的方式,它们的区别是:静态库在程序的链接阶段被复制到了程序中,和程序运行的时候没有关系;动态库在链接阶段没有被复制到程序中,而是程序在运行时由系统动态加载到内存中供程序调用。使用动态库的优点是系统只需载入一次动态库,不同的程序可以得到内存中相同的动态库的副本,因此节省了很多内存。

编译.dll文件:

暂 空 :)

编译.lib文件:

暂 空 :)

下面主要谈谈这两种库的调用:

在我们代码编译应用程序调用.dll库时,需要在VS中配置环境:

1.附加包含目录../include

2.附加库目录:../lib

3.附加依赖项:.lib

说明:编译dll库时,会生成.dll、.lib文件(以及自带的头文件),其中调用函数的代码封装在.dll文件中——添加环境变量(或直接拷贝到库目录下,直接在库目录的路径中包含),函数的调用地址及其他内存信息封装在.lib文件中——附加依赖项中添加相应的名称xxx.lib,函数的接口在头文件中(.h)——包含目录;

另:

1)在添加目录的时候,应多考虑使用相对路径(便于代码的移植);

2)如果我们需要将编译的应用程序.exe文件在其他的电脑上运行,需要打包它需要调用的.dll文件(放在同一目录下),调用的dll文件包括:自己编译的dll文件和VC编译器运行库的dll文件(MSVCP110D.dll,MSVCR110D.dll ),不用打包.lib文件,因为在编译应用程序的时候,已经将.lib文件包含到生成的.exe文件;

3)编译.EXE 应用程序有两种模式:Debug和Release,其中,D模式下表示调试,生成的exe文件中包含了调试信息的接口,R模式下是发行版exe程序,生成的exe文件不包含调试信息,程序经过优化,效率高内存小;所以在移植到其他的电脑上使用时,优先考虑使用Release模式生成.exe文件;

编译应用程序调用.lib静态库:

如上面所讲,静态库的.lib文件包含了链接库的所有信息(函数代码和接口信息)。所以我们在调用静态库.lib时,只需要包含头文件目录(../include. .h),附加库目录,即可;

这样,生成的应用程序.exe中将包含静态库.lib的信息,这将导致生成的exe程序过大,不利用移植;

未完待续。。。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值