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. 在 Java 中运用动态挂载实现 Bug 的热修复

    大多数 JVM 具备 Java 的 HotSwap 特性,大部分开发者认为它仅仅是一个调试工具.利用这一特性,有可能在不重启 Java 进程条件下,改变 Java 方法的实现.典型的例子是使用 IDE ...

  2. ASP.NET Core Identity Hands On(2)——注册、登录、Claim

    上一篇文章(ASP.NET Core Identity Hands On(1)--Identity 初次体验)中,我们初识了Identity,并且详细分析了AspNetUsers用户存储表,这篇我们将 ...

  3. sudo apt-get update: 0% [正在等待报头]

    问题描述:使用apt-get下载一个文件,由于下载的太慢,使用Ctrl+C强制结束.然后输入sudo apt-get update,想继续下载其他文件.结果出现如标题所示的错误,截图如下:按照网上说的 ...

  4. 死链接检查工具:Xenu 使用教程

    一.软件作用 Xenu 全称Xenu’s Link Sleuth,是一款英文软件,界面单一,功能简单,使用方法很容易掌握.虽然看起来简单,但Xenu却拥有强大的功能.Xenu可以对网站的内链进行详细的 ...

  5. 工厂方法模式--java代码实现

    工厂方法模式 工厂方法模式,对简单工厂模式进行了升级.我们将水果园比作一个工厂,在简单工厂模式下,水果园是一个具体的工厂,直接用来生产各种各样的水果.那么在工厂方法模式下,水果园是一个抽象工厂,那么苹 ...

  6. asp.net core系列 48 Identity 身份模型自定义

    一.概述 ASP.NET Core Identity提供了一个框架,用于管理和存储在 ASP.NET Core 应用中的用户帐户. Identity添加到项目时单个用户帐户选择作为身份验证机制. 默认 ...

  7. 用Docker解决坑爹的环境搭建系列——ubuntu16.04 SSH

    sudo docker run --name java -d -p 19992:22 -p 9992:8080 hub.c.163.com/public/ubuntu:16.04-tools # 可以 ...

  8. Redis的正确使用姿势

    前言 说到分布式缓存,可能大多数人脑海浮现的就是redis了,为什么redis能够在竞争激烈的缓存大战中脱颖而出呢?原因无非有一下几点:性能好,丰富的特性跟数据结构,api操作简单.但是用的人多了,就 ...

  9. 服务端预渲染之Nuxt(介绍篇)

    现在前端开发一般都是前后端分离,mvvm和mvc的开发框架,如Angular.React和Vue等,虽然写框架能够使我们快速的完成开发,但是由于前后台分离,给项目SEO带来很大的不便,搜索引擎在检索的 ...

  10. netcore编程之后面对不习惯的xshell黑屏部署,是时候使用jenkins自动化发布工具了

     在很久之前net还只能在windows上部署的时候,或许很多创业公司的朋友发布项目还都是人肉部署,反正windows都是可视化的界面,拖拖拉拉,开开关关还不 是特别麻烦...现如今你的项目需要在li ...