c语言中dlopen函数,dlopen()

c语言中dlopen函数,dlopen()4 1 dlopen dlopen 函数打开一个函数库然后为后面的使用做准备 C 语言原形是 void dlopen constchar filename intflag 如果文件名 filename 是以 开头 也就是使用绝对路径 那么 dlopne 就直接使用它 而不去查找某些环境变量或者系统设置的函数库所在的目录了 否则 dlopen 就会按照下面的次序查找函数库文件 1 环境变

4.1. dlopen()

dlopen函数打开一个函数库然后为后面的使用做准备。C语言原形是:

void * dlopen(const char *filename, int flag);

如果文件名filename是以“/”开头,也就是使用绝对路径,那么dlopne就直接使用它,而不去查找某些环境变量或者系统设置的

函数库所在的目录了。否则dlopen()

就会按照下面的次序查找函数库文件:

1. 环境变量LD_LIBRARY指明的路径。 2. /etc/ld.so.cache中的函数库列表。 3.

/lib目录,然后/usr/lib。不过一些很老的

a.out的loader则是采用相反的次序,也就是先查/usr/lib,然后是/lib。

Dlopen()函数中,参数flag的值必须是RTLD_LAZY或者RTLD_NOW,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’。

如果有好几个函数库,它们之间有一些依赖关系的话,例如X依赖Y,那么你就要先加载那些被依赖的函数。例如先加载Y,

然后加载X。

dlopen()函数的返回值是一个句柄,然后后面的函数就通过使用这个句柄来做进一步的操作。如果打开失败dlopen()就返

回一个NULL。如果一个函数库被多次打开,它会返回同样的句柄。

如果一个函数库里面有一个输出的函数名字为_init,那么_init就会在dlopen()这个函数返回前被执行。我们可以利用这个

函数在我的函数库里面做一些初始化的工作。我们后面会继续讨论这个问题的。

4.2. dlerror()

通过调用dlerror()函数,我们可以获得最后一次调用dlopen(),dlsym(),或者dlclose()的错误信息。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/219685.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午10:07
下一篇 2026年3月17日 下午10:08


相关推荐

  • 二维vector初始化方法

    二维vector初始化方法方法 1 include iostream include vector voidmain inta 2 intb 4 初始化方法 1 std vector std vector int gt vec a std vector int b 2 行 4vector vector int gt vec a vector lt vector int int std vector int vector iostream

    2026年3月16日
    2
  • OpenCV学习笔记(29)KAZE 算法原理与源码分析(三)特征检测与描述

    OpenCV学习笔记(29)KAZE 算法原理与源码分析(三)特征检测与描述KAZE系列笔记:1. OpenCV学习笔记(27)KAZE算法原理与源码分析(一)非线性扩散滤波2. OpenCV学习笔记(28)KAZE算法原理与源码分析(二)非线性尺度空间构建3. OpenCV学习笔记(29)KAZE算法原理与源码分析(三)特征检测与描述4. OpenCV学习笔记(30)KAZE算法原理与源码分析(四)KAZE特征的性能分析与比较5. OpenCV学习笔记

    2022年6月18日
    41
  • C语言 史上最详细快速排序图解,让小白也能轻松理解

    C语言 史上最详细快速排序图解,让小白也能轻松理解快速排序可以看作是冒泡排序的一种升级版 优点就是快速 但是稳定性差 因为是史上最详细快速排序 所以我写的非常细 基本每一句代码都解释 图解到位了 需要耐心浏览 先上代码 再对代码进行图解 大家也可以先把代码跑一遍 有个底 快速排序 voidmy sort intarr intlow inthigh 递归结束条件 if low gt high return 记录数组第一个值和最后一个值 intleft low right high

    2026年3月26日
    2
  • mysql8修改root的密码(如何查看自家wifi密码)

    部署环境:安装版本redhatCent7.0MYSQL版本8.0.2.0成功部署完毕后出现故障情况:1.正常启动MYSQL服务后,敲Linux中root账户和密码进入不去。2.从/etc/my.cnf配置文件中加入skip-grant-table后正常登陆,但是不能创建用户等多操作总结来说:想进去mysql后不能操作多指令,操作多指令又不能进去mysql,死…

    2022年4月13日
    137
  • 数列极限定义的具体解释(举例)–十分易懂

    数列极限定义的具体解释(举例)–十分易懂数列极限定义的具体解释(举例)–十分易懂自己看书没彻底明白,百度了几个还不错的解释。直接上图吧!这里重点看举例这个解释很好理解了。2.下面的另一种解释指出了N是项数并配图例。如果朋友们还有更好的理解方法,欢迎留言哦!谢谢…

    2022年5月2日
    41
  • nginx防火墙命令

    nginx防火墙命令Linux 端口操作常见命令一 查看哪些端口被打开 netstat anp 二 关闭端口号 iptables AINPUT ptcpdrop 端口号 jDROPiptable AOUTPUT ptcpdport 端口号 jDROP 三 打开端口号 iptables IINPUT ptcpdport 端口号 jACCEPT 四 以下是 linux 打

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号