静态库和动态库相关概念



静态库
动态库
导入库


delay load
rebase


静态库:

以lib库(obj集合)的形式提供代码重用,需要和客户程序一起编译,成为一个二进制程序体。


动态库:

以二进制的dll提供代码重用,无需和客户程序一起编译。客户程序依赖其导出符号表(lib)。


dll和lib(静态库)在代码上的差别,主要是多了__declspec(dllexport)。

模板类不能导出。



静态链接:
1、#pragma comment(lib, "libname.lib"). 
2、使用additional dependencies添加libname.lib。(同时在Additional Library Directories中设置搜寻位置)。
以上两种方式的libname.lib可以是静态库,也可以是dll的导入库。同时,使用处需要库的头文件。
libname.lib为dll的静态库时,静态库就被引入了,可以编译了。相应被引用的函数和代码都被拷贝到exe中。
libname.lib为dll的导入库时,由于有了符号表和地址,也可以编译了。但函数代码和数据保存在dll中,只在exe被载入时,才把dll加载到内存。
3、是project dependencies设置依赖。相当于加lib。可以加静态库或动态库。
4、直接把lib文件添加到调用者的工程中。(没用过,不确定效果。)


动态链接:

1、LoadLibrary。


DllMain():

这个函数不是必须的。

不提供时,系统给提供一个默认的。(??)


查看dll的导出符合集:

dumpbin.exe /export dllname.dll

查看第三方dll所依赖的dll(特别是RT库的类型):

dumpbin.exe /import thirdparty.dll


dll文件位置:
dll应该放在和exe同目录中,或放在system PATH中。


留意使用的rt库类型:

表6-1 C/C++运行期库

库名描述
LibC.lib用于单线程应用程序的静态链接库(当创建新应用程序时,它是默认库)
LibCD.lib用于单线程应用程序的静态链接库的调试版
LibCMt.lib用于多线程应用程序的静态链接库的发行版
LibCMtD.lib用于多线程应用程序的静态链接库的调试版
MSVCRt.lib用于动态链接M S V C R t . d l l库的发行版的输入库
MSVCRtD.lib用于动态链接M S V C R t D . d l l的调试版的输入库。该库同时支持单线程应用程序和多线程应用程序







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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值