动态库的静态和动态加载方法

Linux 环境:

1. 动态加载:头文件 #include <dlfcn.h>

    流程:(1)//获取库句柄

                       HANDLE hModule = dlopen(szPath, RTLD_LAZY);   

               (2)//获取函数地址

                       typedef void(*Fun)(param1, param2,...); 

                       Fun pFun = (Fun)dlsym(hModule, _MMT("需要引用的库函数名")); 

               (3)//函数调用

                      pFun(param1, param2,...);

               (4)//释放库句柄

                       dlclose(hModule);

                       hModule = NULL;

2.静态加载:

  流程: (1)编译条件里,依赖动态库  LIBS +=

              (2)调用库函数之前,加载该动态库。 dlopen 或者 Java 的 Load。

              (3)可以直接调用库函数了,像调用静态库的方式,不再需要 dlsym 获取库函数的地址。

              (4)释放步骤 (2) 里的句柄。

 

显式加载动态库,除了调用 API: dlopen, Load,也可以直接把动态库存放在系统目录下,如 ./system/lib。

 

Windows 环境:

1.  动态加载:

    流程:同 Linux 流程一样,只是 API 不同。

               (1)HANDLE hModule = ::LoadLibrary(szPath);

               (2)Fun pFun = (Fun)GetProcAddress((HINSTANCE)pInfo->hModule, _MMT("需要引用的库函数名"));

               (3)pFun(param1, param2,...);

               (4)FreeLibrary(hModule);

                        hModule = NULL;

2. 静态加载:(1)引用对应的静态库 .a

                      (2)HANDLE hModule = LoadLobrary(szPath);

                      (3)   可以直接调用库函数了,不再需要 GetProcAddress 获取库函数的地址。

                      (4)FreeLibrary(hModule);

                               hModule = NULL;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值