lib,dll这两样东西在许多编程书中都很少出现,但实际工程中,这两样东西的作用确实非常重要,我觉得c++程序员都有必要了解这两样东西。


首先总共有 动态链接 和 静态链接 这两种链接方式

|静态链接:

静态链接使用静态链接库lib,且只在源代码编译时用到(编译期)。
编译生成静态库时会生成一个.lib文件
.lib里面装载了各种类,函数的实现。
这种静态链接的lib实际上是多个obj文件的集合。

|为什么需要静态链接?

在实际工程中,往往各模块的规模庞大(一堆.h .cpp文件)
而编译时,每个.cpp对应生成.obj文件,一个模块生成一堆obj文件,然后分不清哪些obj是属于哪部分模块,造成维护的不便性
为了解决这问题,可以将每个主要模块先编译成一个.lib文件,再使用静态链接的方法,在编译期将各模块的.lib的文件链接起来。

|动态链接:

动态链接使用动态链接库dll,且只在程序启动时用到(运行期)
编译生成动态链接库时会生成一个.dll文件和一个.lib文件

.dll存放了各函数,.exe刚开始运行时就会动态链接上所需的.dll文件(运行期)

.lib则一般是一些索引信息,记录了dll中函数的入口和位置(跟静态链接库的lib不同),不过仍然只在编译期用到(编译期)

|为什么需要动态链接?

由于.dll存放了各函数,.exe里无需再存放.dll已含有的函数,只需调用时存放相应的函数地址,这样可以将.exe的空间大小转移一部分给.dll。
在大型软件的更新中,如果更新一个庞大的exe文件,负担想必是极大的。如果仅针对其中某几个.dll更新,则可以减少更新的大小。提高灵活性。
缺点还是有的,在程序刚开始运行时,程序会动态链接n个.dll,这个操作需要花时间。
(某些大型游戏,点开图标后,半天都不把程序弹出来,大概也有这个原因- -||)

lib和dll文件的初了解的更多相关文章

  1. lib和dll文件的区别和联系

    什么是lib文件,lib和dll的关系如何 (2008-04-18 19:44:37)    (1)lib是编译时需要的,dll是运行时需要的. 如果要完成源代码的编译,有lib就够了. 如果也使动态 ...

  2. [转载]lib和dll文件的区别和联系

    出处:https://blog.csdn.net/weiaipan1314/article/details/52252478 什么是lib文件,lib和dll的关系如何 (2008-04-18 19: ...

  3. vs2010下C++调用lib或dll文件

    注: DLL:表示链接库,包含dll,lib文件: dll: 表示my.dll文件 lib: 表示my.lib文件 C++ 调用.lib的方法: 一: 隐式的加载时链接,有三种方法 1  设置工程的 ...

  4. .lib和.dll文件

    LIB文件中存放的是函数调用的信息,值得一提的是数据库有静态数据库(.lib文件)和动态数据库(.dll文件). 静态编译 静态编译将导出声明和实现都放在lib中.编译后所有代码都嵌入到宿主程序. 静 ...

  5. 关于vs的lib文件和dll文件

    一.LIB文件概念 一个lib文件是obj文件的集合.当然,其中还夹杂着其他一些辅助信息,目的是为了让编译器能够准确找到对应的obj文件 二.与DLL的区别 (1)lib是编译时需要的,dll是运行时 ...

  6. .h(头文件) .lib(库文件) .dll(动态链接库文件) 之间的关系和作用的区分

    .h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的.附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件.如果要完成源代码的编译和链接,有头文件和lib就够了 ...

  7. VS2017生成一个简单的DLL文件 和 LIB文件——C语言

    下面我们将用两种不同的姿势来用VS2017生成dll文件(动态库文件)和lib文件(静态库文件),这里以C语言为例,用最简单的例子,来让读者了解如何生成dll文件(动态库文件) 生成动态库文件 姿势一 ...

  8. 有关windows系统的EXE和DLL文件说法错误

    正确答案: B C   你的答案: C (错误) EXE和DLL文件都是PE文件 EXE不能有导出函数,DLL可以有导出函数 EXE有x86和x64之分,则DLL没有 EXE可以单独运行,DLL则不行 ...

  9. 使用VS2012生成DLL文件 (1)

    一:生成DLL 1:创建DLL工程 文件->新建->项目->visual c++->win32->win32控制台应用程序(win32项目也可以) 填写项目名称MyDLL ...

随机推荐

  1. 种树 BZOJ2151 模拟费用流

    分析: 我们如果选择点i,那么我们不能选择i-1和i+1,如果没有这个限制,直接贪心就可行,而加上这个限制,我们考虑同样贪心,每次选择i后,将点i-1,i+1从双向链表中删除,并且将-a[i]+a[i ...

  2. Django 基础一(安装和启动)

    在开始跟着本文学习Django进行Web开发之前你需要有一定的python编程基础,会用一些简单的Linux系统命令.如果你对python一无所知,请先去这个网站学习一下python编程的基础 Lin ...

  3. PoiDemo【Android将表单数据生成Word文档的方案之二(基于Poi4.0.0)】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 使用Poi实现android中根据模板文件生成Word文档的功能.这里的模板文件是doc文件.如果模板文件是docx文件的话,请阅读 ...

  4. 如何扩展分布式日志组件(Exceptionless)的Webhook事件通知类型?

    写在前面 从上一篇博客高并发.低延迟之C#玩转CPU高速缓存(附示例)到现在又有几个月没写博客了,啥也不说,变得越来越懒了,懒惰产生了拖延后遗症. 最近一周升级了微服务项目使用的分布式日志组件Exce ...

  5. vue笔记 递归组件的使用

    递归组件 什么是递归组件? 组件自身去调用组件自身. 代码示例 DetailList.vue(子组件-递归组件) <template> <div> <div class= ...

  6. 流程控制之while循环

    目录 语法(掌握) while+break while+continue while循环的嵌套(掌握) tag控制循环退出(掌握) while+else(了解) 语法(掌握) 循环就是一个重复的过程, ...

  7. slice是什么时候决定要扩张?

    slice是什么时候决定要扩张? 网上说slice的文章已经很多了,大都已经把slice的内存扩张原理都说清楚了.但是是如何判断slice是否需要扩张这个点却没有说的很清楚.想当然的我会觉得这个app ...

  8. 【RecyclerView优化】

    1.局部刷新 (1)避免整个列表的数据更新,只更新受影响的布局.例如,加载更多时,不使用notifyDataSetChanged(),而是使用notifyItemRangeInserted(range ...

  9. Java进阶篇设计模式之十一 ---- 策略模式和模板方法模式

    前言 在上一篇中我们学习了行为型模式的访问者模式(Visitor Pattern)和中介者模式(Mediator Pattern).本篇则来学习下行为型模式的两个模式,策略模式(Strategy Pa ...

  10. spring2.0 Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definiti

    1. 报错信息 Description: The bean 'dataSource', defined in BeanDefinition defined in class path resource ...