dlopen函数的用法
2019独角兽企业重金招聘Python工程师标准>>>
一、为何使用dlopen
dlopen()是一个强大的库函数。 该函数将打开一个新库,并把它装入内存。该函数主要用来加载库中的符号,这些符号在编译的时候是不知道的。比如 Apache Web 服务器利用这个函数在运行过程中加载模块,这为它提供了额外的能力。一个配置文件控制了加载模块的过程。这种机制使得在系统中添加或者删除一个模块时,都 不需要重新编译了。
二、使用dlopen
可以在自己的程序中使用 dlopen()。dlopen() 在 dlfcn.h 中定义,并在 dl 库中实现。它需要两个参数:一个文件名和一个标志。文件名可以是我们学习过的库中的 soname。标志指明是否立刻计算库的依赖性。如果设置为 RTLD_NOW 的话,则立刻计算;如果设置的是 RTLD_LAZY,则在需要的时候才计算。另外,可以指定 RTLD_GLOBAL,它使得那些在以后才加载的库可以获得其中的符号。
当库被装入后,可以把 dlopen() 返回的句柄作为给 dlsym() 的第一个参数,以获得符号在库中的地址。使用这个地址,就可以获得库中特定函数的指针,并且调用装载库中的相应函数。
三、相关函数
Linux提供了一套API来动态装载库。下面列出了这些API:
- dlopen,打开一个库,并为使用该库做些准备。
- dlsym,在打开的库中查找符号的值。
- dlclose,关闭库。
- dlerror,返回一个描述最后一次调用dlopen、dlsym,或dlclose的错误信息的字符串。
C语言用户需要包含头文件dlfcn.h才能使用上述API。glibc还增加了两个POSIX标准中没有的API:
- dladdr,从函数指针解析符号名称和所在的文件。
- dlvsym,与dlsym类似,只是多了一个版本字符串参数。
三、关于编译
返回值:
打开错误返回NULL
成功,返回库引用
编译时候要加入 -ldl (指定dl库)
例如
gcc test.c -o test -ldl
参考文档
http://blog.chinaunix.net/uid-10540984-id-3508235.html
https://www.baidu.com/baidu?wd=dlopen%E5%87%BD%E6%95%B0&tn=monline_4_dg&ie=utf-8
转载于:https://my.oschina.net/u/2829875/blog/702389
dlopen函数的用法相关推荐
- dlopen与dlsym用法
dlopen和dlsym是用于打开动态链接库中的函数,将动态链接库中的函数或类导入到本程序中: dlopen函数: 功能:打开一个动态链接库 包含头文件: #include <dlfcn.h&g ...
- 关于C语言中的malloc和free函数的用法
一.malloc()和free()的基本概念以及基本用法: 1.函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针 ...
- Python assert断言函数及用法
Python assert断言函数及用法 Python assert 语句,又称断言语句,可以看做是功能缩小版的 if 语句,它用于判断某个表达式的值,如果值为真,则程序可以继续往下执行:反之,Pyt ...
- python中的counter()、elements()、most_common()和subtract()函数的用法
python中的counter().elements().most_common()和subtract()函数的用法 counter()方法: class collections.Counter([i ...
- Java正则表达式--Matcher.group函数的用法
https://www.cnblogs.com/jiafuwei/p/6080984.html Java正则表达式--Matcher.group函数的用法 原来,group是针对()来说的,group ...
- MapInfo中常用查询函数及用法
MapInfo中常用查询函数及用法: 函数用途 语法 备注 图层中选点 Str$(obj)="point": Str(String)表示字符串:point表示点: 图层中选线 St ...
- Oracle trunc()函数的用法
--Oracle trunc()函数的用法 /**************日期********************/ 1.select trunc(sysdate) from dual --20 ...
- php error log 函数,php日志函数error_log如何使用 php日志函数error_log用法介绍
php日志函数error_log如何使用?这篇文章主要介绍了php日志函数error_log用法,结合实例形式分析了php日志函数error_log相关的配置文件设置.函数功能.用法与使用注意事项,需 ...
- Python中的map()函数和reduce()函数的用法
Python中的map()函数和reduce()函数的用法 这篇文章主要介绍了Python中的map()函数和reduce()函数的用法,代码基于Python2.x版本,需要的朋友可以参考下
最新文章
- java SE环境变量配置
- Centos7部署ntp服务器同步时间以及直接将本地时间同步为北京时间
- MySQL使用可重复读作为默认隔离级别的原因
- UART的FIFO功能
- 2014/Province_Java_B/2/调和级数
- 基于微服务架构的token生成和使用
- Linux 命令(81)—— chmod 命令
- 8月7日科技联播:人民日报发推欢迎Google回归,李彦宏回应非常有信心再赢一次...
- 日志收集系统Elasticsearch,Fluentd , Kibana
- 802.11介质访问控制——CSMA/CD协议详解
- 贪心算法小记——代理服务器
- bzoj2242: [SDOI2011]计算器
- 扫雷游戏网页版_《我的世界》简单的两款小游戏 带你回味和同学在电脑课上的时光...
- Centos7之安装谷歌浏览器
- 天使投资人讨论区块链投资:区块链虚火还是真火?
- javaScript jquery完美判断图片是否加载完毕
- 108. 将有序数组转换为二叉搜索树
- Java map集合实现上一条(篇),下一条(篇)新闻翻篇功能
- 磁带机PowerVault LTO-7使用
- GAT解读graph attention network
热门文章
- 中如何调取api_API(接口)是什么
- python宣传图片_宣传图片制作网站
- java 漏洞挖掘_Apache Tika命令注入漏洞挖掘
- oracle触发器不允许修改数据库,Oracle数据库使用触发器记录表数据修改记录
- java中b的平方表示_第七届蓝桥杯Java B——四平方和
- linux 记事本程序,Linux记事本操作
- for遍历list scala_面试官问:List 如何一边遍历,一边删除?
- python中用函数货币转换代码_python将人民币转换大写的脚本代码
- android q测试机型,小米9安卓Q系统刷机包开启测试 小米Android Q适配机型一览
- django分页模块