【开发工具】Visual Studio的C/C++链接动态库静态库的方法

862 阅读2分钟

动态库

一、 静态链接

方法一:

  1. 将动态库的.dll.lib文件,拷贝到目标工程目录下。
  2. 引用.lib文件。
  3. 在代码中添加该语句
#pragma comment(lib, "example.lib")

方法二:

  1. 在Visual Studio的项目配置属性,C/C++->附加库目录下,添加动态库.lib文件所在文件目录的完整路径。

  2. 在Visual Studio的项目配置属性,链接器->输入->附加依赖项,添加动态库.lib文件名。

二、动态链接

  1. 仅拷贝库的.dll文件到目标工程目录下。
  2. 在代码中动态调用,先使用操作系统的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);

静态库

静态链接

  1. 添加头文件路径
    在项目属性中,导航到 C/C++ → 常规 → 附加包含目录,添加静态库的头文件路径。
  2. 添加库文件路径
    在项目属性中,导航到 链接器 → 常规 → 附加库目录,添加静态库的 .lib 文件路径。
  3. 添加静态库
    在项目属性中,导航到 链接器 → 输入 → 附加依赖项,添加静态库的 .lib 文件名(如 mylib.lib)。 或者在代码中添加以下语句:
#pragma comment(lib, "example.lib")