dlsym
来源:互联网 发布:飞常准 航旅 知乎 编辑:程序博客网 时间:2024/06/06 10:48
dlopen()函数和dlsym()函数
1 dlopen()函数
用于打开一个.so库,原型如下:
void *dlopen(const char *filename, int flag)
{
soinfo *ret;
pthread_mutex_lock(&dl_lock);
ret = find_library(filename);
if (unlikely(ret == NULL)) {
set_dlerror(DL_ERR_CANNOT_LOAD_LIBRARY);
} else {
ret->refcount++;
}
pthread_mutex_unlock(&dl_lock);
return ret;
}
根据filename打开一个库,成功并返回一个句柄,出现错误返回为NULL。
其中的flag:
RTLD_LAZY 暂缓决定,等有需要时再解出符号 resolve undefined symbols as code from the dynamic library is executed
RTLD_NOW 立即决定,返回前解除所有未决定的符号。 resolve all undefined symbols before dlopen() returns and fail if this cannot be done
RTLD_LOCAL
RTLD_GLOBAL 允许导出符号
RTLD_GROUP
RTLD_WORLD
2 dlsym()函数
原型:
void *dlsym(void *handle, const char *symbol)
根据上面dlopen()函数放回的指针,获取函数(symbol)的地址,void*指向函数的地址,供接下来的调用。
用于打开一个.so库,原型如下:
void *dlopen(const char *filename, int flag)
{
soinfo *ret;
pthread_mutex_lock(&dl_lock);
ret = find_library(filename);
if (unlikely(ret == NULL)) {
set_dlerror(DL_ERR_CANNOT_LOAD_LIBRARY);
} else {
ret->refcount++;
}
pthread_mutex_unlock(&dl_lock);
return ret;
}
根据filename打开一个库,成功并返回一个句柄,出现错误返回为NULL。
其中的flag:
RTLD_LAZY 暂缓决定,等有需要时再解出符号 resolve undefined symbols as code from the dynamic library is executed
RTLD_NOW 立即决定,返回前解除所有未决定的符号。 resolve all undefined symbols before dlopen() returns and fail if this cannot be done
RTLD_LOCAL
RTLD_GLOBAL 允许导出符号
RTLD_GROUP
RTLD_WORLD
2 dlsym()函数
原型:
void *dlsym(void *handle, const char *symbol)
根据上面dlopen()函数放回的指针,获取函数(symbol)的地址,void*指向函数的地址,供接下来的调用。
- dlsym
- dlsym
- dlsym函数
- dlsym RTLD_DEFAULT
- dlsym函数
- dlopen dlsym dlclose解析
- dlopen, dlsym 的简介
- dlopen dlsym dlclose dlerror
- dlopen dlsym dlclose dlerror
- linux dlopen于dlsym
- dlopen和dlsym
- dlopen和dlsym
- dlopen和dlsym
- dlopen;dlclose;dlsym
- dlopen与dlsym用法
- HAL dlopen dlsym
- dlopen与dlsym
- dloepn dlsym使用
- SVM-支持向量机(二)
- C++强大背后(转自http://www.cnblogs.com/miloyip/archive/2010/09/17/behind_cplusplus.html)
- 消灭程序员需要百年吗?
- 关于资源密码
- Oracle中时间格式在TO_DATE与TO_CHAR中的应用
- dlsym
- lds链接叫本文件
- 开源数据库全接触-MongoDB,Cassandra,Hypertable,CouchDB,Redis,HBase,Voldemort等35款数据库简介
- 数据结构之哈希表
- 用鼠标点击获得位置信息以及来绘制自己的名字
- Some of my thoughts on life's crossroads.
- 关于Linux嵌入式系统开发
- 自动化脚本框架1
- Linux kernel boot process——从实模式(real mode)到保护模式(protected mode),再到分页(paging)