- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VS的Lib和DLL的学习整理
我们在用VS开发C++项目中经常要用到自己或别人开发的lib。很多初学者对lib和dll的意义大概都了解的,但是由于我们的vs的IED允许有各种配置和使用方式,每一种方案都有其对应的意义,但对一些初学者往往会带来混肴,而且网络上的资料都是片面的和碎片化的,对于初学者的学习会代理很多不方便。解决混肴的最佳方法,就是把他们摆到一起来,通过对比来加深理解,克服混肴。
下面总结了六种方法,用实际例子一一验证。
本文主要分为lib的三种使用方式和dll的三种使用方式。
libVS配置方式。
lib显示调用:代码方式。
本地开发lib的使用。
Dll 加载时动态链接。
Dll运行时动态链接。
Def文件的使用。
Lib库
ib的使用原理就是头文件加lib。头文件告诉你程序中能调用那些接口,lib实现这些接口。
首先,我们用第三方库Luajit来 验证各种方法。备注:LuaJit 即c语言写的lua代码解释器,会编译到你自己的程序中。
准备:
1.首先下载LuaJit,解压后目录如下图:
找了一下各个文件夹,没有看到文件,查了下说明文档,需要自己编译一下。
2.找到vs的命令行编辑器,然后到src目录下编译一下,
安装下面的指令执行一下:
执行成功后,会生成下面四个新文件。
下面就可以开始使用此lib里。
先新建一个控制台应用程序的项目用于实战。
方法一:配置
1.配置 头文件的目录配置:
2.lib的目录配置:
指明lib目录中要用到的那个具体lib:
此时,就配置好了,下面就来写例子代码:
执行后的结果:
方法二;显式调用
1.配置头文件:如方法一
2.去掉lib的配置:
上面的步骤中input配置去掉,改成下面的语句。效果是一样的。
#pragma comment (lib,Lua51.lib)
3.执行后效果和方法相同:
方法三:本地lib的使用
本地lib是兼容以上两个方法的,但是vs提供了第三个方便的方法。
1.新建一个lib项目
编辑简单的代码:
头文件
具体执行,我们只是输出简单的字符串:
编译后生成的是lib文件,其实此时不需要专门编译:
上面编译好的lib可以用以上两种方式来使用,但是我用vs提供的第三种方式来实现:
2.在测试项目中添加一下依赖:
头文件还是要导入的,由于项目在本地解决方案中,所有直接导入头文件,不用配置了:
执行结果:
三种lib方式比较一下:
方法一:纯配置,单纯好管理
方法二:比较凌乱,一会配置,一会要写代码不推荐。
方法三:自己写的lib放到同一个解决方案中才可以使用,假如是第三方库则无法使用。
总结:不管哪个方案,头文件目录是必须的,毕竟代码中要显示的调用接口名字的。
另外对于vs配置的一些比较容易混肴的地方我们列举比较一下:
1. Include Directories :用于全局的,所有解决方案所有项目都可以使用,等于给系统配置的。
2.Additional Include Directories:用于本项目的,添加额外的你要搜索的包含头文件的“include”目录 是针对头文件的。比较单纯,推荐用这个。
3. Additional Library directories:添加额外的你要搜索的包含库文件(即.lib)的目录。减少代码调用的路径编写,相当于
#pragma comment (lib,xx/xx/xx/xx/Lua51.lib)。
4. Additional dependencies:清楚地列出你要添加的.lib文件。其实就是代替#pragma comment (lib,Lua51.lib)。
DLL库
DLL 是动态的 用法其实和lib是一样的,唯一不同的是,dell是随应用程序带出去的,可以随时更新,不用编译到应用程序中。
方法一:加载时动态链接(需要.lib 和.dll和头文件)
1.新建dll项目:
2.函数声明要带上关键字__declspec(dllexport):声明导出函数、类、对象等供外面调用:
测试一下,下面是不带__declspec(dllexport)关键字的,生成的没有lib文件:
带上关键字后的生成文件:
3.导入项目的方式和上面的lib一样,头文件的目录和对应的库目录
备注:附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件。如果要完成源代码的编译和链接,有头文件和lib就够了。
原理:程序中引用了一个H文件里的函数,编链器怎么知道该调用哪个DLL文件呢?这就是LIB文件的作用: 告诉链接器 调用的函数在哪个DLL中,函数执行代码在DLL中的什么位置,这也就是为什么需要附加依赖项 .LIB文件,它起到桥梁的作用。如果生成静态库文件,则没有DLL ,只有lib,这时函数可执行代码部分也在lib文
您可能关注的文档
- 2002春人教部编版七年级历史下册课件:第3单元 第21课 清朝前期的文学艺术.ppt
- 2019年秋人教版八年级上册第3单元基础知识检测.ppt
- 人教版九年级下册数学 26.1.1反比例函数.ppt
- 2020届高考化学二轮题型对题必练——物质的性质探究型实验题.docx
- 上海牛津版(五四学制)六年级科学上册:3.2 生命的诞生和成长 .pptx
- 简--报(综合学科).pptx
- 新目标英语八年级上册Unit3练习试题.docx
- 人教版九年级下册道德与法治教案设计5.1 走向世界大舞台.doc
- 人教部编版九年级历史上册 第18课 美国的独立 培优训练.docx
- 第5.章透镜及应用1透镜导学案.docx
原创力文档


文档评论(0)