C++的lib文件到底是什么
一、背景
首先我们得弄清楚,什么是动态链接库与静态链接库
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文件到底是什么相关推荐
- 静态链接库(LIB)和动态链接库(DLL),DLL的静态加载和动态加载,两种LIB文件。
静态链接库(LIB)和动态链接库(DLL),DLL的静态加载和动态加载,两种LIB文件. 一. 静态链接库(LIB,也简称"静态库")与动态链接库(DLL,也简称"动态库 ...
- lib文件夹的作用和配置lib文件
在学习JAVAWEB期间,犯了一个很低级的错误,就是不知道javaweb下的lib是干什么用的,所以在学习javaweb的时候没有建lib文件夹,导致老是报错. 那么javaweb下的lib文件夹到底 ...
- opencv 所有lib文件
今天在vs上写一段代码,编译后总是显示有无法解析的函数,又不知道该函数在哪个lib文件中,在百度上找了半天,也没找到.已是就将所有lib库都添加到vs链接中.如下: opencv_calib3d241 ...
- OpenCV 2.4.9-2.4.13各个版本附加依赖项Lib文件汇总
使用OpenCV前,需对项目属性进行设置,主要包括:包含目录.库目录,附加依赖项等.包含目录和库目录设置如下图所示 包含目录添加3个:(1)OpenCV安装文件夹\opencv\build\inclu ...
- VS中添加lib文件,编译出错:LINK : fatal error LNK1104: 无法打开文件:×××.lib解决办法
添加库文件: 在VS中右击项目点属性: 添加头文件目录: 配置属性-->C/C++-->常规-->附加包含目录 加上头文件存放的目录. 添加lib文件: 配置属性--&g ...
- 快速获取OpenCV库(Lib)文件下的所有文件的目录名~
图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 OpenCV的VS配置中很重要的一步是配置链接器 ...
- GDI对象存储和查看lib文件导出函数
GDI对象存储 C++对象通常存储在栈.堆或者由应用程序通过定制的新操作符分配的任何地址空间里.基本上,它总是存放在用户模式的地址空间里,除非我们正在讨论内核模式设备驱动程序. Win ...
- 如何生成动态库 .dll 的符号 .lib 文件?
在知道拥有动态库和头文件的情况下,但没有动态库符号文件的情况下,如何静态链接动态库? 1.使用 Microsoft Visual Studio Tools 命令行命令生成 xxx.def 文件,进而使 ...
- VS怎样创建和使用lib文件
假设你当前正在使用vs写了一个project,那么你想如今就生成一个Lib文件,那么能够直接在"项目属性"上进行改动i 项目属性->配置属性->常规->配置类型中 ...
最新文章
- 参加完Python培训可以做什么
- 【读书笔记】程序员的自我修养总结(七)
- tableau地图城市数据_Tableau 地图 | 无法识别的城市
- libiconv库简单裁剪支持CP437编码
- 【算法分析与设计】快速幂算法与快速幂取模算法
- Vue nextTick执行时机分析
- 成交量与股价关系的深度剖析 (一)
- Xcode + cocoapods + jenkins + fastlane + git + 蒲公英自动化打包 上传
- pyqt5 给按钮设置css样式和界面背景设置
- Windows 10 Creators Update隐私策略变动一览
- LightOJ - 1050 (唯一分解+推公式+乘法逆元)
- 车载与体征/手势检测 毫米波雷达信号处理流程
- web点播VOD m3u8播放识别为live流 播放几个.ts切片停止播放 排错
- Python爬取天堂网图片
- 【Python笔记】第5章 if语句
- 软件测试之因果图法(P24——P26)
- 化学分子溶解度预测模型(python-Rdkit构建)
- canvas实现电子签名
- 生产排程系统_高级计划与排程的基本概念
- 16大类31种好看的可视化图表,图表控们快收藏!
热门文章
- python GUI demo(tkinter)
- 宋晓丽20190919-1 每周例行报告
- 利用SSH 或 Teamviewer 控制远程服务器
- 青蛙过河游戏c语言,C语言动态规划(7)___过河(Vijos P1002)
- 暴风TV发布第二款AI无屏电视:六大升级打造投影旗舰
- 你的计算机运行的是盗本副本,电脑总是提示“您可能是软件盗版的受害者。 此计算机上安装的 Windows 产品密钥不是正版。”该怎么办呀?...
- SYMBIAN Carbide C++ sisx真机程序生成过程
- faceu激萌相机里面vue_faceu激萌是什么_faceu激萌功能特点介绍_3DM手游
- COOX基础培训之二次开发(二)
- java generic 介绍