dlopen, dlsym等动态链接库函数解析
来源:互联网 发布:java分销系统源码 编辑:程序博客网 时间:2024/06/13 23:45
1. 打开动态链接库:
#include <dlfcn.h>
void *dlopen(const char *filename, int flag);
该函数返回操作句柄,如:
void *pHandle = dlopen(strSoFilePath, RTLD_LAZY);
2. 取动态对象地址:
#include <dlfcn.h>
void *dlsym(void *pHandle, char *symbol);
dlsym根据动态链接库操作句柄(pHandle)与符号(symbol),返回符号对应的地址。
使用这个函数不但可以获取函数地址,也可以获取变量地址。比如,假设在so中
定义了一个void mytest()函数,那在使用so时先声明一个函数指针:
void (*pMytest)(),然后使用dlsym函数将函数指针pMytest指向mytest函数,
pMytest = (void (*)())dlsym(pHandle, "mytest");
3. 关闭动态链接库:
#include <dlfcn.h>
int dlclose(void *handle);
该函数将该.so的引用计数减一,当引用计数为0时,将它从系统中卸载。
4. 动态库错误函数:
#include <dlfcn.h>
const char *dlerror(void);
当动态链接库操作函数执行失败时,dlerror可以返回出错信息,返回值为NULL时
表示没有错误信息。
在取到函数执行地址后,就可以在动态库的使用程序里根据动态库提供的函数接口
调用动态库里的函数。
在编写调用动态库的程序的Makefile文件时,需要加入编译选项-ldl。
从void *dlsym(void *handle, char *symbol); 的参数可以看出,该函数只传两个
参数:一个指向so的handle和一个函数的symbol,所以so里面的函数应该不允许重载,
否则根据一个 symbol不能确定指向那个函数。
- dlopen, dlsym等动态链接库函数解析
- dlopen dlsym dlclose加载动态链接库
- 加载动态链接库的相关接口dlopen,dlsym和dlclose等
- dlopen dlsym dlclose解析
- dlopen dlsym dlclose解析
- dlopen dlsym dlclose解析
- dlopen dlsym dlclose解析
- dlsym dlopen打开动态链接库后返回的指针
- LINUX下动态链接库dlopen dlsym dlclose函数使用说明
- [Linux]使用dlopen、dlsym、dlclose操作访问动态链接库
- LINUX下动态链接库dlopen dlsym dlclose函数使用说明
- 采用dlopen、dlsym、dlclose加载动态链接库【总结】
- 采用dlopen、dlsym、dlclose加载动态链接库【总结】
- 采用dlopen、dlsym、dlclose加载动态链接库【总结】
- 采用dlopen、dlsym、dlclose加载动态链接库
- 采用dlopen、dlsym、dlclose加载动态链接库
- 采用dlopen、dlsym、dlclose加载动态链接库【总结】
- 采用dlopen、dlsym、dlclose加载动态链接库【总结】
- atitit。mssql sql server 转换mysql 及 分页sql ast的搭建
- UVA - 10825 Anagram and Multiplication 暴力
- c#网络编程常用特性之多线程
- hdu 5029 树链剖分+链表
- Dijkstra算法
- dlopen, dlsym等动态链接库函数解析
- C#中按引用传递与按值传递的区别
- kvo示例代码
- Android中获取应用程序(包)的信息-----PackageManager的使用(一)
- ref和out的用法及区别
- UVALive - 4394 String painter DP
- Android类装载器DexClassLoader的简单使用
- leetcode:Plus One
- Android sdk 下载不了