## Library相关知识点 ### 1.静态库 #### 1.1静态库的基本概念 静态库是**编译期绑定**的代码复用方案,适合: - 追求**部署简单性**的场景 - 对**运行时环境控制严格**的系统 - **性能敏感**且**无需热更新**的模块 #### 1.2静态库的生成 第一,创建新项目,选择静态库。 第二,添加.c文件,同时编写.h和.c文件进行编写,编写完成后进行编译,生成.lib格式的静态库文件。 #### 1.3静态库的调用 ##### 1.3.1在工程配置中调用 **静态库调用有三种方式**: **第一**,在工程中调用静态库需要静态库路径,首先include,“内填写路径,并最后写.h文件名”,其次需要 #pragma comment进行静态库声明,然后就可以在函数内使用静态库。 image-20250708195734251 image-20250708195750876 **第二**,在项目属性 -- > 链接器 --> 常规 --> 附加库中添加静态库.lib文件的地址,并在输入页面附加依赖项中添加.lib文件。 **第三**,直接将lib文件添加到项目中。 以上三种方法都需要添加.h文件到项目。 ##### 1.3.2在代码中语句加载lib调用 程序内可以使用相对路径也可以使用绝对路径,相对路径时需要将静态库文件复制到工程文件内。 参考上一项。 ### 2.动态库 #### 2.1动态库的基本概念 动态库(Dynamic Link Library, DLL / Shared Object, SO)是一种**在程序运行时才被加载的代码库**,允许多个程序共享同一份内存中的库副本 #### 2.2动态库的生成 ##### 2.2.1通过导出语句生成 通过dllimport与dllexport导出语句生成动态库,新建空白项目,添加头文件源文件进行编写,在头文件中添加导出语句即可,然后将方案属性选择动态库,生成解决方案即可导出动态库。如图所示。 image-20250709103933102 下图是动态库导出的文件夹状态。 ![image-20250709104007991](./../VisualStudio/Pictures/image-20250709104007991.png) ##### 2.2.2通过模块文件生成 通过def文件进行生成动态库。生成前需要添加def文件,然后添加代码进行生成操作。 image-20250710125750078 image-20250710125826600 #### 2.3动态库的调用 ##### 2.3.1在工程配置中调用 动态库的调用分为隐性和显性调用两种。 第一,隐性调用,需要将动态库生成的.lib、.h和.dll文件添加到项目文件下,其次在项目工程中,通过属性-->链接器-->输入-->添加依赖项.lib文件,同时工程内添加.h头文件,然后可以进行调用了。 image-20250709104635329 image-20250709104647954 第二,显性调用 定义函数指针,并声明函数指针变量,然后通过程序动态加载dll文件到内存中(HINSTANCE hModule = LoadLibrary("TestDll.dll");),并获取指针地址,最后调用函数。 image-20250709104909662 image-20250709104930529 ##### 2.3.2在代码中语句加载lib调用 #pragma comment (lib,地址),地址可以选择绝对地址或者相对地址。 image-20250708195734251 ##### 2.3.3在代码中语句加载dll调用 HINSTANCE hDll = LoadLibrary(TEXT("DLLTest.dll")); image-20250710153852360 image-20250710153915835