No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

3.4 KiB

库相关知识点

静态库

静态库的基本概念

静态库是指在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在链接步骤中,连接器将从库文件取得
所需的代码 ,复制到生成的可执行文件中的这种库。在程序编译时会被整合到最终的可执行文件中,这意味着编译后的程序可以独立运行,无需外部库。

静态库的优点

加载速度快,因为库的代码已经被包含在程序中,以及发布程序时无需提供静态库文件,便于移植。

静态库的缺点

相同的库文件可能在内存中被加载多次,消耗系统资源;此外,每当库文件更新时,都需要重新编译整个项目以生成新的可执行文件,这会浪费时间。

静态库的生成

image-20250710102658220

image-20250710102736776

静态库的调用

  • 在工程配置中调用

    1. 头文件的引用

    方案一:设置头文件目录

    将头文件复制到我们的工程文件中。

    方案二:

    image-20250710103535872

    1. 库文件的引用

      方案一:连接器设置库文件目录image-20250710103348996

      方案二:

      image-20250710105104029

      将lib添加到资源文件中

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

    使用#pragma comment(lib, "creat_static_lib.lib")指令

动态库

动态库的基本概念

动态库是一种在程序运行时才被加载的库文件,它包含了函数和数据,可以被多个程序共享。

动态库的优点

可以实现不同进程间的资源共享,升级简单,只需替换库文件而无需重新编译应用程序,以及可以控制库的加载时机,不调用库函数时库不会被加载。

动态库的缺点

其加载速度比静态库慢,且发布程序时需要提供依赖的动态库文件。

动态库的生成

  • 通过导出语句生成
  1. 先宏定义MATHLIBRARY_EXPORTS

  2. 写导出语句

image-20250710133121032

  1. .C文件正常编写需要封装函数的逻辑
  • 通过模块文件生成

    image-20250710133513492

    image-20250710133559788

    image-20250710133741106

动态库的调用

在工程配置中调用

导入头文件,引用

image-20250710133846878

在代码中语句加载lib调用

#pragma comment(lib, "creat_static_lib.lib")

在代码中语句加载dll调用

dll文件复制到dbug下面,使用以下程序指令动态加载

#include <Windows.h>
HINSTANCE Dll = LoadLibrary(L"test.dll");
if (Dll == NULL) {
    std::cerr << "无法加载DLL! 错误码: " << GetLastError() << std::endl;
    return 1;
}
typedef void (*Func)(); // 定义函数指针类型
Func add = (Func)GetProcAddress(Dll, "fun1");
add();
FreeLibrary(Dll);
return 0;

image-20250715145914567

image-20250715145953621

image-20250715145825247