dlopen、dlsym、dlclose都是作加载动态库之用。dlopen以指定模式打开指定的动态连接库文件,并返回一个句柄给调用进程,dlerror返回出现的错误,dlsym通过句柄和连接符名称获取函数名或者变量名,dlclose来卸载打开的库

dlopen

1. dlopen函数原型:

void* dlopen(const char* pathName, int mode)

2. mode在Linux下面有几种方式:

解析方式

  • RTLD_LAZY:暂缓决定,在dlopen返回前,对于动态库中的未定义的符号不执行解析(只对函数引用有效,对于变量引用总是立即解析)
  • RTLD_NOW:立即决定,在dlopen返回前,解析出所有未定义的符号

作用范围

  • RTLD_GLOBAL: 动态库中定义的符号可被其后打开的其他库重定位
  • RTLD_LOCAL: 动态库中定义的符号不能被其后打开的其他库重定位。

作用方式

  • RTLD_NODELETE:在dlclose()期间不卸载库,并且在以后使用dlopen()重新加载库时不初始化库中的静态变量。这个flag不是POSIX-2001标准。
  • RTLD_NOLOAD: 不加载库,可用于测试库是否已经加载(dlopen()返回NULL说明未加载,否则说明加载),也可用于改变已加载库的flag,
  • RTLD_DEEPBIND:在搜索全局符号前先搜索库内的符号,避免同名符号的冲突

3. 返回值

成功则返回引用这个数据库的句柄,如果失败则返回NULL

dlopen、dlsym、dlclose相关推荐

  1. linux dlopen 源码,采用dlopen、dlsym、dlclose加载动态链接库

    采用dlopen.dlsym.dlclose加载动态链接库 转载请标注,熬夜写的文章,挺辛苦 ... 环境 系统: 16.04.1-Ubuntu 编译器: gnu 5.4.0 python: 2.7. ...

  2. Linux C++ libdl.so dlfcn.h使用方法(dlopen()、dlsym()、dlclose()、dlerror())(用于动态链接库操作)(懒加载、立即加载)共享库符号、动态库

    文章目录 dlfcn.h解析 - dlopen():打开一个动态链接库文件并返回一个句柄,该句柄用于后续的操作,如查找符号.关闭库等. - dlsym():在打开的动态链接库中查找指定的符号,并返回符 ...

  3. gcc编译出现dlopen、dlerror、dlsym、dlcolse的解决方法

    gcc编译出现dlopen.dlerror.dlsym.dlcolse的解决方法 参考文章: (1)gcc编译出现dlopen.dlerror.dlsym.dlcolse的解决方法 (2)https: ...

  4. 采用dlopen、dlsym、dlclose dlopen dlerror加载动态链接库【总结】

    1.前言为了使程序方便扩展,具备通用性,可以采用插件形式.采用异步事件驱动模型,保证主程序逻辑不变,将各个业务已动态链接库的形式加载进来,这就是所谓的插件.linux提供了加载和处理动态链接库的系统调 ...

  5. 【转】采用dlopen、dlsym、dlclose加载动态链接库

    1.前言 为了使程序方便扩展,具备通用性,可以采用插件形式.采用异步事件驱动模型,保证主控制逻辑不变,将各个业务以动态链接库的形式加载进来,这就是所谓的插件.linux提供了加载和处理动态链接库的系统 ...

  6. 采用dlopen、dlsym、dlclose加载动态链接库

    1.前言 为了使程序方便扩展,具备通用性,可以采用插件形式.采用异步事件驱动模型,保证主程序逻辑不变,将各个业务已动态链接库的形式加载进来,这就是所谓的插件.linux提供了加载和处理动态链接库的系统 ...

  7. Linux 中 dlopen、dlsym、dlclose、dlerror函数

    编译时候要加入 -ldl (指定dl库) dlopen 基本定义 功能:打开一个动态链接库  [喝小酒的网摘]http://blog.const.net.cn/a/17154.htm 包含头文件:  ...

  8. 动态链接库(dlopen、dlsym、dlclose)(Linux)

    一.介绍 动态链接,是在程序已经执行时,加载链接的方法 二.有关动态链接库生成 1.在导出处使用 extern "C"申明 extern "C" {void f ...

  9. 采用dlopen、dlsym、dlclose加载动态链接库【总结】

    1.前言 为了使程序方便扩展,具备通用性,可以采用插件形式.采用异步事件驱动模型,保证主程序逻辑不变,将各个业务已动态链接库的形式加载进来,这就是所谓的插件.linux提供了加载和处理动态链接库的系统 ...

最新文章

  1. 树莓派视觉小车 -- 物体跟踪(OpenCV)
  2. 阅读mutate源码学习dplyr
  3. hdu2561 第二小整数(排序)
  4. Modular Multiplicative Inverse(模乘逆元)
  5. Log4j使用详解(log4j.XML格式)
  6. 我的 Vue.js 学习日记 (七) - 事件与修饰符
  7. MySQL查询过程及Scheme设计与数据类型优化
  8. react --- 生命周期 给子组件传递数据
  9. 微信小程序学习目录推荐
  10. mysql binlog 备份_Mysql数据库的增量备份与还原
  11. 序号-element-序号根据页数和行数计算
  12. Atitit atimvc rest原理与自定义实现t33 目录 1.1. Web.xml 1 1.2. MvcFilter 2 1.3. jerserMeth 4 原理 过滤器 过滤即可
  13. Linux 操作系统原理 — 内存 — 大页内存
  14. 跟华为悦盒V9U机顶盒拼了
  15. 【基金量化研究系列】大类资产配置研究(六)——多资产风险平价策略
  16. 全站仪和手机连接软件_测量员APP全站仪设站的的应用说明
  17. NAT ALG原理与应用
  18. 6羽的调侃并不彻底的激怒武青云
  19. uniapp 启动页视频
  20. debian8.7 下配置fai机环境

热门文章

  1. 我的创作纪念日--韦_恩
  2. 准备机试时候不懂的问题
  3. 数组模拟二叉搜索树(二叉排序树)
  4. 把WinXP系统升级到Win7的方法
  5. a76比a73强多少_Arm Cortex-A76的微架构改进了什么?
  6. python冒泡排序,非常细节
  7. 数字传媒广告传播企业网站模板
  8. 如何优雅的用 Markdown 画流程图
  9. 计算机显示器代表品牌和价格,电脑显示器什么品牌好价位是多少
  10. unity 如何检测vr htc vive 头盔是否佩戴