0x00 前言
本文主要是参考:在自己的项目中调用别人的库的方法(static lib库,dynamic lib库以及dll动态库)_邓无邪的博客-优快云博客 写下来的
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下生成并使用静态库_邓无邪的博客-优快云博客_vs 生成静态库
二、动态 lib
在我们调用 DLL 库是就会涉及到我们的动态 lib 文件了,涉及到以下文件:
- .h文件
- 如上,同样需要包含到你的代码
- .lib文件
- 包含一些函数的入口和具体位置,必须在编译阶段引入这个文件,否则会报错。(如果没有这个动态lib文件或者不想用lib文件,需要用Win32的API函数LoadLibrary和GetProcAddress来装载)
- .dll文件
- 实际的实现,在程序运行时动态调用
介绍的直接一些的相关的 DLL 编写和调用可以看:VS下静态库与动态库的生成与使用_Neverland_LY‘s Domain-优快云博客 的动态库部分