动态库
一、 静态链接
方法一:
- 将动态库的
.dll与.lib文件,拷贝到目标工程目录下。 - 引用
.lib文件。 - 在代码中添加该语句
#pragma comment(lib, "example.lib")
方法二:
-
在Visual Studio的项目配置属性,
C/C++->附加库目录下,添加动态库.lib文件所在文件目录的完整路径。 -
在Visual Studio的项目配置属性,
链接器->输入->附加依赖项,添加动态库.lib文件名。
二、动态链接
- 仅拷贝库的
.dll文件到目标工程目录下。 - 在代码中动态调用,先使用操作系统的API,将dll加载到内存中,通过系统提供的实例来使用动态库。
Windows系统:
#include <WIndows.h>
// LoadLibrary
// GetProcAddress
// FreeLibrary
// 1. 加载DLL文件获取文件句柄,若DLL加载失败返回NULL
HINSTANCE hTest = LoadLibrary(L"example.dll");
// 2. 通过函数指针获取要使用函数的入口地址
// 假如add()是在动态库中的函数
// int add(int a, int b) { return a + b; }
typedef int (*p_add)(int a, int b); // 定义一个与add()相同的函数指针
p_add addFunc = (p_add)GetProcAddress(hDLL, "add"); // 获取函数入口地址
// 3. 释放DLL资源
FreeLibrary(hTest);
Linux系统:
#include <dlfcn.h>
// 1. 加载动态库,若DLL加载失败返回NULL
void* hTest = dlopen("./libexample.so", RTLD_LAZY);
// 2. 通过函数指针获取要使用函数的入口地址
// 假如add()是在动态库中的函数
// int add(int a, int b) { return a + b; }
typedef int (*p_add)(int a, int b); // 定义一个与add()相同的函数指针
p_add addFunc = (p_add)dlsym(hTest, "add"); // 调用失败返回NULL
// 3. 卸载动态库
dlclose(handle);
静态库
静态链接
- 添加头文件路径
在项目属性中,导航到C/C++ → 常规 → 附加包含目录,添加静态库的头文件路径。 - 添加库文件路径
在项目属性中,导航到链接器 → 常规 → 附加库目录,添加静态库的.lib文件路径。 - 添加静态库
在项目属性中,导航到链接器 → 输入 → 附加依赖项,添加静态库的.lib文件名(如mylib.lib)。 或者在代码中添加以下语句:
#pragma comment(lib, "example.lib")