您的位置:首页 > 其它

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

2013-02-26 15:25 330 查看
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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: