- 4
- 0
- 约2.54千字
- 约 2页
- 2017-06-10 发布于北京
- 举报
c/c++工程中的各种文件【转】
lib是和dll对应的。lib是静态链接库的库文件,dll是动态链接库的库文件。所谓静态就是link的时候把里面需要的东西抽取出来安排到你的exe文件中,以后运行你的exe的时候不再需要lib。所谓动态就是exe运行的时候依赖于dll里面提供的功能,没有这个dll,你的exe无法运行。lib,dll,exe都算是最终的目标文件,是最终产物。而c/c++属于源代码。源代码和最终目标文件中过渡的就是中间代码obj,实际上之所以需要中间代码,是你不可能一次得到目标文件。比如说一个exe需要很多的cpp文件生成。而编译器一次只能编译一个cpp文件。这样编译器编译好一个cpp以后会将其编译成obj,当所有必须要的cpp都编译成obj以后,再统一link成所需要的exe,应该说缺少任意一个obj都会导致exe的链接失败。1.obj里存的是编译后的代码跟数据,并且有名称,所以在连接时有时会出现未解决的外部符号的问题。当连成exe后便不存在名称的概念了,只有地址。lib就是一堆obj的组合。2.理论上可以连接obj文件来引用其他工程(可以认为一个obj文件等价于编译生成它的cpp文件,可以引用obj来替换cpp,也可以添加cpp来替换obj ),但实际中通常用lib来实现工程间相互引用。3.编译器会默认链接一些常用的库,其它的需要你自己指定。lib和DLL的区别(1)lib是编译时需要的,dll是运行时需要的。如果要完成源代码的编译,有lib就够了。如果也使动态连接的程序运行起来,有dll就够了 。在开发和调试阶段,当然最好都有。(2) 一般的动态库程序有lib文件和dll文件。lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的。如果有dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中。如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。 静态编译的lib文件有好处:给用户安装时就不需要再挂动态库了。但也有缺点,就是导致应用程序比较大,而且失去了动态库的灵活性,在版本升级时,同时要发布新的应用程序才行。(3)在动态库的情况下,有两个文件,一个是引入库(.LIB)文件(实际上也算是一个静态库,只是在链接时只能把函数在DLL的入口链接到exe中,而不像真正静态链接库那样将函数体真正链接到exe中 ,通过lib进行的动态链接实际上也使用了静态链接来实现 ),一个是DLL文件,引入库文件包含被DLL导出的函数的名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件链接到所需要使用的DLL文件,库中的函数和数据并不复制到可执行文件中,因此在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中所要调用的函数的内存地址,这样当一个或多个应用程序运行是再把程序代码和被调用的函数代码链接起来,从而节省了内存资源。从上面的说明可以看出,DLL和.LIB文件必须随应用程序一起发行,否则应用程序将会产生错误。
DLL内的函数分为两种:(1)DLL导出函数,可供应用程序调用;(2)DLL内部函数,只能在DLL程序使用,应用程序无法调用它们
创建静态链接库和创建动态链接库
VC6中创建[Win32 Dynamic-Link Library]工程便可以创建出一个空的DLL工程.
VC6中创建[Win32 Static Library]工程便可以创建出一个空的LIB工程(静态链接库工程,仅生成一个lib文件).
添加lib文件的常用办法有二个:1、把*.lib放在VC的Lib目录中2、修改project setting的Link-Input中的Addtional library path,加入你的目录dll:是可实际运行的二进制代码,有定位代码的!
3、也可以在object/library中直接写上lib文件路径.(这里实际上是可以写上任意obj文件或者lib文件的).
.h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的。
附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件。如果要完成源代码的编译和链接,有头文件和lib就够了。如果也使动态连接的程序运行起来,有dll就够了。在开发和调试阶段,当然最好都有。
.h .lib .dll三者的关系
H文件作用是:声明函数接口
DLL文件作用是: 函数可执行代码
当我们在自己的程序中引用了一个H文件里的函数,编链器怎么知道该调用哪个DLL文件呢?这就是LIB文件的作用: 告诉链接器 调用的函数在哪个DLL中,函数执行代码在DLL中的什么位置 ,这也就是为什么需要附加依赖项 .LIB文件,它起到桥梁的作用。如果生成静态库
您可能关注的文档
- Cathy的静心话语:接纳自己.doc
- CATIA在机械制图教学中的应用.doc
- CC(含数据结构)知识点.doc
- CCU是医院中病情重.doc
- CC结构体字节对齐详解.docx
- CC返回内部静态成员的陷阱.doc
- CEC:GallupQ12:评估新员工绩效.doc
- cehkongfuJava反射笔记.doc
- CentOSmail命令用法介绍.doc
- CEO10岁小孩都该知道快乐的6个好习惯.docx
- 广东省广州省实验中学教育集团2025-2026学年八年级上学期期中考试物理试题(解析版).docx
- 广东省广州大学附属中学2025-2026学年八年级上学期奥班期中物理试题(解析版).docx
- 广东省广州市第八十六中学2025-2026学年八年级上学期期中物理试题(含答案).docx
- 广东省广州市第八十九中学2025-2026学年八年级上学期期中考试物理试题(解析版).docx
- 广东省广州市第二中学2025-2026学年八年级上学期期中考试物理试题(含答案).docx
- 广东省广州市第八十六中学2025-2026学年八年级上学期期中物理试题(解析版).docx
- 广东省广州市第八十九中学2025-2026学年八年级上学期期中考试物理试题(含答案).docx
- 广东省广州市第二中学2025-2026学年八年级上学期期中考试物理试题(解析版).docx
- 2026《中国人寿上海分公司营销员培训体系优化研究》18000字.docx
- 《生物探究性实验教学》中小学教师资格模拟试题.docx
最近下载
- 中医护理技术在骨科中的应用.ppt VIP
- 非煤矿山节后复工安全培训.pptx VIP
- 吉林省松原市长岭县2025~2026学年度下学期第一次月考试卷 八年英语(含答题卡、答案).docx VIP
- 2019新人教版高中英语必修二Unit4词汇表.pdf VIP
- 2025年上半年中国铁路西安局集团有限公司校招笔试题带答案.docx VIP
- 教育学原理-第三章-教育与人的发展【实用参考】.ppt VIP
- 婴幼儿早期教育课程标准.docx VIP
- 景成道人培训课件.ppt VIP
- 2022年高中军训心得体会(集合15篇).docx VIP
- (统编版2024)语文七年级下册 第三单元《课外古诗词诵读》课件(新教材).pptx
原创力文档

文档评论(0)