Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

4.2 KiB

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

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