lib 文件(基础)
文章目录
- 0x00 前言
- 0x01 lib 简介
- 0x02 静态 lib
- 0x03 动态 lib
- 0x04 lib 的调用
- 一、静态 lib
- 二、动态 lib
0x00 前言
本文主要是参考:在自己的项目中调用别人的库的方法(static lib库,dynamic lib库以及dll动态库)_邓无邪的博客-CSDN博客 写下来的
0x01 lib 简介
lib 文件也是一种类似于 DLL 的库文件,常称之为静态链接库文件,而 lib 又有两种:静态 lib 和动态 lib。
0x02 静态 lib
静态 lib (static Library)是任意个 obj 文件的打包,它包含了所有导出声明和实现,lib 文件被链接到程序后就会将整个 lib 文件嵌进程序代码中,此后 exe 的运行不再需要 lib 了。
虽然这大大增加了程序的体积。所以对于一个程序而言,如果只需要完程编译,有静态 lib 文件即可(理论上)。
0x03 动态 lib
动态 lib ,也称导入库(Import Libary),与 DLL 的存在相关。对于我们想链接 DLL 文件有两种方式:
- 直接使用 LoadLibary ,前提是知道函数地址位置
- 使用导入库 lib 文件
动态 lib 文件其实与静态 lib 文件并不相同,静态 lib 包含了实际代码等等,而动态 lib 中只含有地址符号表来帮助程序找到响应函数。
所以动态 lib 就是对于 DLL 的一个使用方式补充,方便了人们的使用 DLL ,方便了软件的更新(只需要更新 DLL 和相应的动态 lib 即可,不用更新软件代码)。
0x04 lib 的调用
一、静态 lib
静态 lib 库的调用需要用到以下文件:
- .h文件
- 包含函数的声明,数据结构等东西,在调用lib的时候,需要把该头文件包含进你的代码
- .lib文件
- 包含具体的实现
在源代码中需要使用以下代码导入静态 lib 文件
#include "..\lib.h"
#pragma comment(lib,"文件地址如:./test.lib") //指定与静态库一起链接
//也可以在VS中的附加处添加,而不使用第二段代码,文章中有讲添加方法
更加详细的静态 lib 编写和调用讲解可以看以下博客:VS2010/2013下生成并使用静态库_邓无邪的博客-CSDN博客_vs 生成静态库
二、动态 lib
在我们调用 DLL 库是就会涉及到我们的动态 lib 文件了,涉及到以下文件:
- .h文件
- 如上,同样需要包含到你的代码
- .lib文件
- 包含一些函数的入口和具体位置,必须在编译阶段引入这个文件,否则会报错。(如果没有这个动态lib文件或者不想用lib文件,需要用Win32的API函数LoadLibrary和GetProcAddress来装载)
- .dll文件
- 实际的实现,在程序运行时动态调用
介绍的直接一些的相关的 DLL 编写和调用可以看:VS下静态库与动态库的生成与使用_Neverland_LY‘s Domain-CSDN博客 的动态库部分
lib 文件(基础)相关推荐
- 由.def文件生成lib文件[转]
最近在学习curl库时,碰到一个问题,从官网上下载了一个lib版的,却发现只有.dll,没有lib文件,感觉很奇怪,google了之后才知道,原来库作者的用意是让用户自己生成lib文件,下载到的lib ...
- r软件说明lib文件未指明_软件说明文件
r软件说明lib文件未指明 The software primarily consists of Computer Programs and the associated documentation. ...
- VS生成DLL没有生成LIB文件的解决方法
1.在所建工程上单击鼠标右键,在弹出的右键菜单中选择"添加-->新建项....---->模块定义文件",在该模块定义文件中写导出函数表,单击确定.然后在所建工程上单击鼠 ...
- 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 项目属性->配置属性->常规->配置类型中 ...
最新文章
- 移动端各种小技巧及优化体验(网上看到记录一下省的总结了)
- 智能指针——weak_ptr
- 消息中间件的背景分析
- Fragment的生命周期和activity如何的一个关系
- Java项目几个月能完成_c#项目转JAVA,第5个月,基本完成
- 无表头单链表的总结----输出链表
- ppt生成器_小米发布会ppt词云怎么做的
- 腾讯专家谈全球数据保护案例
- PostreSQL崩溃试验全记录
- java 文件下载 并发_高并发下载tomcat下的文件时,发生java.net.SocketException: Connection reset解决方案...
- 哎呀!可能有弹出式窗口拦截器生成Gmail无法打开该网页。如果您使用弹出式窗口拦截器,请将其关闭以便打开窗口。...
- 【CSS标签的嵌套规则】
- 2021最新一线互联网大厂常见高并发面试题解析,快手Java面试算法题
- 中国法定节假日调整内容公布 总天数增加1天
- 电脑端微信无法打开腾讯文档
- Golang学习日志 ━━ 调用系统默认浏览器打开指定链接(全平台)
- 如何搭建IPv6测试你的APP
- MobileNetV2: Inverted Residuals and Linear Bottlenecks--M Sandler
- 初识 Mac机子 关机命令
- Pycharm2018.2永久破解