静态库是指在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在链接步骤中,连接器将从库文件取得
所需的代码 ,复制到生成的可执行文件中的这种库。在程序编译时会被整合到最终的可执行文件中,这意味着编译后的程序可以独立运行,无需外部库。
加载速度快,因为库的代码已经被包含在程序中,以及发布程序时无需提供静态库文件,便于移植。
相同的库文件可能在内存中被加载多次,消耗系统资源;此外,每当库文件更新时,都需要重新编译整个项目以生成新的可执行文件,这会浪费时间。
在工程配置中调用
方案一:设置头文件目录
将头文件复制到我们的工程文件中。
方案二:
在代码中语句加载lib调用
使用#pragma comment(lib, "creat_static_lib.lib")
指令
动态库是一种在程序运行时才被加载的库文件,它包含了函数和数据,可以被多个程序共享。
可以实现不同进程间的资源共享,升级简单,只需替换库文件而无需重新编译应用程序,以及可以控制库的加载时机,不调用库函数时库不会被加载。
其加载速度比静态库慢,且发布程序时需要提供依赖的动态库文件。
先宏定义MATHLIBRARY_EXPORTS
写导出语句
在工程配置中调用
导入头文件,引用
在代码中语句加载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;