zoukankan      html  css  js  c++  java
  • lib和dll文件的初了解


    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,这个操作需要花时间。
    (某些大型游戏,点开图标后,半天都不把程序弹出来,大概也有这个原因- -||)

  • 相关阅读:
    如何在IIS7/7.5上配置IISADMPWD
    运用DebugDiag诊断ASP.Net异常
    vuecli3修改项目启动端口
    彻底删除vscode及安装的插件和个人配置信息
    angular中的 input select 值绑定无效,以及多出一个空白选项问题
    简述MVC模式
    vuecli3 运行报错
    前端开发规范
    nodejs 下载最新版本
    小程序 自定义弹窗出现后存在滚动穿透问题
  • 原文地址:https://www.cnblogs.com/KillerAery/p/9097541.html
Copyright © 2011-2022 走看看