# 库相关知识点
## 一、静态库
- **1.静态库的基本概念**

  - 静态库是一种在程序编译链接阶段被整合进可执行文件中的库形式。

- **2.静态库的生成**

  - 1.创建一个空项目

    <img src="./pictures/静态库.png" alt="静态库" style="zoom: 50%;" />

  - 2.添加一个.c和.h文件

    ![静态库](./pictures/静态库2.png)

  - 3.将项目属性配置为.lib静态库

    <img src="./pictures/静态库1.png" alt="静态库" style="zoom:67%;" />

  - 4.点击解决方案

    ![静态库](./pictures/静态库3.png)

- **3.静态库的调用**

  - 在工程配置中调用

    <img src="./pictures/静态库的使用2.png" alt="静态库的使用" style="zoom: 67%;" />

    <img src="./pictures/静态库的使用3.png" alt="静态库的使用" style="zoom:67%;" />

  - 在代码中语句加载lib调用

    <img src="./pictures/静态库的使用1.png" alt="静态库的使用" style="zoom:67%;" />
## 二、动态库
- **1.动态库的基本概念**

  - 动态库是一种在程序运行时加载的库文件。

- **2.动态库的生成**

  - 通过导出语句生成

    (1)新建一个空白模板，并添加源文件和对应的.h文件。

    ​	![动态库的生成](./pictures/动态库的生成.png) 

    (2)在.h文件中加入导出语句

    ​	<img src="./pictures/动态库的生成1.png" alt="动态库的生成" style="zoom:67%;" />

    (3)设置预处理定义

    ​	<img src="./pictures/动态库的生成2.png" alt="动态库的生成" style="zoom:67%;" />

     (4)设置配置类型

    ​	<img src="./pictures/动态库的生成3.png" alt="动态库的生成" style="zoom:67%;" />

  - 通过模块文件生成

    (1)设置配置类型	

    <img src="./pictures/动态库的生成3.png" alt="动态库的生成" style="zoom:67%;" />

    (2)在源文件中添加并编写.def文件，最后生成解决方案
    
    <img src="./pictures/def文件生成动态库.png" alt="def文件生成动态库" style="zoom:67%;" />

- **3.动态库的调用**

  -  在工程配置中调用

    (1)设置头文件目录

    ​	<img src="./pictures/动态库工程配置调用.png" alt="动态库工程配置" style="zoom:67%;" />

    (2)设置库文件目录

    ​	<img src="./pictures/动态库工程配置调用1.png" alt="动态库工程配置" style="zoom:67%;" />

    (3)在链接器中添加导入库lib

    ​	<img src="./pictures/动态库工程配置2.png" alt="动态库工程配置" style="zoom:67%;" />

    (4)添加DLL库到当前工作目录下

    ​	<img src="./pictures/动态库工程配置3.png" alt="动态库工程配置" style="zoom:67%;" />

    (5)在程序中添加对应的库并调用即可

  - 在代码中语句加载lib调用

    #pragma comment (lib,地址），地址可以选择绝对地址或者相对地址。

    <img src="./pictures/动态库代码调用.png" alt="动态库代码调用" style="zoom:67%;" />

  - 在代码中语句加载dll调用

​		使用 Windows API 提供的 `LoadLibrary` 和 `GetProcAddress` 函数来实现。

​		<img src="./pictures/动态库代码调用1.png" alt="动态库代码调用" style="zoom:67%;" />