一、背景

首先我们得弄清楚,什么是动态链接库与静态链接库

1.1 动态链接库

目标程序通常都不是独立个体,生成程序时都需要链接其他的库,要用到其他库的代码。对于多个程序同时运行而言,内存中就可能有同一个库的多个副本,占用了太多内存而干的活差不多。

为了优化内存运用效率,引入了动态链接库(Dynamic Link Library),或叫共享库(Shared Object)。使用动态链接库时,内存中只需要一份该库文件,其他程序要使用该库文件时,只要链接过来就行了。由于动态库文件外置,链接到动态库的目标程序相对比较小,因为剥离了大量库代码,而只需要一些链接指针。

使用动态库,也意味着程序需要链接到如 *.dll 或 *.so 文件,得提前装好动态库文件,然后目标程序才能正常运行。

1.2 静态链接库

静态库就是将链接库的代码和自己编写的代码都编译链接到一块,链接到静态库的程序通常比较大,但好处是运行时依赖的库文件很少,因为目标程序自己内部集成了很多库代码。

库文件后缀

Linux/Unix 系统里静态库扩展名一般是 .a,动态库扩展名一般是 .so 。Windows 系统里 VC 编译器用的静态库扩展名一般是 .lib,动态库扩展名一般是 .dll 。

二、lib文件到底是什么

所以很多人认为lib为静态库,dll为动态库,这理解并不错,但不全面。lib其实分两种的

第一种, lib是完整的静态库,里面有函数代码本身,在编译时直接将代码加入程序当中,应用程序直接使用
第二种,lib是动态库的导出声明,只包含头部信息。里面只有函数所在的DLL文件和文件中函数位置的入口,代码由运行时加载在进程空间中的DLL提供

我们分别在windows下进行动态编译与静态编译,此时,可以观察出lib比dll小很多:

curllib.dll             190KB;

curllib.lib 14KB;

curllib_static.lib 1857KB;

C++的lib文件到底是什么相关推荐

  1. 静态链接库(LIB)和动态链接库(DLL),DLL的静态加载和动态加载,两种LIB文件。

    静态链接库(LIB)和动态链接库(DLL),DLL的静态加载和动态加载,两种LIB文件. 一. 静态链接库(LIB,也简称"静态库")与动态链接库(DLL,也简称"动态库 ...

  2. lib文件夹的作用和配置lib文件

    在学习JAVAWEB期间,犯了一个很低级的错误,就是不知道javaweb下的lib是干什么用的,所以在学习javaweb的时候没有建lib文件夹,导致老是报错. 那么javaweb下的lib文件夹到底 ...

  3. opencv 所有lib文件

    今天在vs上写一段代码,编译后总是显示有无法解析的函数,又不知道该函数在哪个lib文件中,在百度上找了半天,也没找到.已是就将所有lib库都添加到vs链接中.如下: opencv_calib3d241 ...

  4. OpenCV 2.4.9-2.4.13各个版本附加依赖项Lib文件汇总

    使用OpenCV前,需对项目属性进行设置,主要包括:包含目录.库目录,附加依赖项等.包含目录和库目录设置如下图所示 包含目录添加3个:(1)OpenCV安装文件夹\opencv\build\inclu ...

  5. VS中添加lib文件,编译出错:LINK : fatal error LNK1104: 无法打开文件:×××.lib解决办法

    添加库文件: 在VS中右击项目点属性: 添加头文件目录:   配置属性-->C/C++-->常规-->附加包含目录 加上头文件存放的目录.   添加lib文件:   配置属性--&g ...

  6. 快速获取OpenCV库(Lib)文件下的所有文件的目录名~

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 OpenCV的VS配置中很重要的一步是配置链接器 ...

  7. GDI对象存储和查看lib文件导出函数

    GDI对象存储     C++对象通常存储在栈.堆或者由应用程序通过定制的新操作符分配的任何地址空间里.基本上,它总是存放在用户模式的地址空间里,除非我们正在讨论内核模式设备驱动程序.     Win ...

  8. 如何生成动态库 .dll 的符号 .lib 文件?

    在知道拥有动态库和头文件的情况下,但没有动态库符号文件的情况下,如何静态链接动态库? 1.使用 Microsoft Visual Studio Tools 命令行命令生成 xxx.def 文件,进而使 ...

  9. VS怎样创建和使用lib文件

    假设你当前正在使用vs写了一个project,那么你想如今就生成一个Lib文件,那么能够直接在"项目属性"上进行改动i 项目属性->配置属性->常规->配置类型中 ...

最新文章

  1. 参加完Python培训可以做什么
  2. 【读书笔记】程序员的自我修养总结(七)
  3. tableau地图城市数据_Tableau 地图 | 无法识别的城市
  4. libiconv库简单裁剪支持CP437编码
  5. 【算法分析与设计】快速幂算法与快速幂取模算法
  6. Vue nextTick执行时机分析
  7. 成交量与股价关系的深度剖析 (一)
  8. Xcode + cocoapods + jenkins + fastlane + git + 蒲公英自动化打包 上传
  9. pyqt5 给按钮设置css样式和界面背景设置
  10. Windows 10 Creators Update隐私策略变动一览
  11. LightOJ - 1050 (唯一分解+推公式+乘法逆元)
  12. 车载与体征/手势检测 毫米波雷达信号处理流程
  13. web点播VOD m3u8播放识别为live流 播放几个.ts切片停止播放 排错
  14. Python爬取天堂网图片
  15. 【Python笔记】第5章 if语句
  16. 软件测试之因果图法(P24——P26)
  17. 化学分子溶解度预测模型(python-Rdkit构建)
  18. canvas实现电子签名
  19. 生产排程系统_高级计划与排程的基本概念
  20. 16大类31种好看的可视化图表,图表控们快收藏!

热门文章

  1. python GUI demo(tkinter)
  2. 宋晓丽20190919-1 每周例行报告
  3. 利用SSH 或 Teamviewer 控制远程服务器
  4. 青蛙过河游戏c语言,C语言动态规划(7)___过河(Vijos P1002)
  5. 暴风TV发布第二款AI无屏电视:六大升级打造投影旗舰
  6. 你的计算机运行的是盗本副本,电脑总是提示“您可能是软件盗版的受害者。 此计算机上安装的 Windows 产品密钥不是正版。”该怎么办呀?...
  7. SYMBIAN Carbide C++ sisx真机程序生成过程
  8. faceu激萌相机里面vue_faceu激萌是什么_faceu激萌功能特点介绍_3DM手游
  9. COOX基础培训之二次开发(二)
  10. java generic 介绍