UNIX下C语言编程与实践11-UNIX 动态库显式调用:dlopen、dlsym、dlerror、dlclose 函数的使用与实例 - 指南

news/2025/10/24 17:06:17/文章来源:https://www.cnblogs.com/tlnshuju/p/19163803

UNIX下C语言编程与实践11-UNIX 动态库显式调用:dlopen、dlsym、dlerror、dlclose 函数的使用与实例 - 指南

2025-10-24 16:56  tlnshuju  阅读(0)  评论(0)    收藏  举报

一、引言:什么是动态库显式调用?

在 UNIX 环境下,动态库调用分为「隐式调用」和「显式调用」。动态库显式调用 是指在程序运行阶段,通过专门的函数(dlopendlsymdlerrordlclose)手动加载动态库、查找库中函数/变量地址、执行调用并关闭库,无需在编译阶段绑定动态库依赖。

动态库显式调用的关键优势是「灵活性」——可根据运行时条件(如配置文件、用户输入)决定是否加载库、加载哪个库,尤其适用于插件化制作、模块化扩展等场景。详细解析显式调用的四大核心函数、全流程实战及问题排查方法。

二、动态库显式调用核心函数解析

UNIX 系统提供 dlfcn.h 头文件封装显式调用的四大函数,需在编译时链接 -ldl 库(动态链接库)才能使用。四大函数的功能、参数及返回值如下:

函数原型核心功能关键参数说明返回值
void *dlopen(const char *filename, int flag);打开动态库并加载到内存,返回库的句柄filename:动态库路径(绝对路径或相对路径,NULL 表示加载当前进程已加载的库);
flag:加载模式(RTLD_LAZY:延迟绑定符号;RTLD_NOW:立即绑定符号)
成功:返回非 NULL 的库句柄;
失败:返回 NULL
void *dlsym(void *handle, const char *symbol);根据符号名(函数名/变量名),从已打开的动态库中查找其地址handledlopen 返回的库句柄;
symbol:要查找的符号名(字符串形式)
成功:返回符号的内存地址;
失败:返回 NULL(需结合 dlerror 确认是否真的失败,因符号可能本身就是 NULL
const char *dlerror(void);获取上一次显式调用函数的错误信息,用于排查问题无参数成功:返回非 NULL 的错误信息字符串;
无错误:返回 NULL
int dlclose(void *handle);关闭动态库句柄,减少库的引用计数(计数为 0 时从内存卸载)handledlopen 返回的库句柄成功:返回 0;
失败:返回非 0

关键提示

1. dlopenflag 参数推荐使用 RTLD_NOW,避免延迟绑定导致运行时突然报错;

2. dlsym 返回的地址需强制转换为对应类型的指针(如函数指针、变量指针)才能使用;

3. 每次调用 dlopendlsymdlclose 后,都应调用 dlerror 检查错误,避免错误信息被覆盖。

2.1 函数工作原理补充

(1)dlopen 加载动态库的过程

当调用 dlopen 打开动态库时,系统会执行以下步骤:

  1. 根据 filename 路径查找动态库文件(支持相对路径、绝对路径,若路径不含 /,则从 LD_LIBRARY_PA

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/945499.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

熟知大模型中mcp概念 --by zk

MCP核心概念解析 什么是MCP:让大模型拥有“手和脚” 大模型本身只有对话和决策能力,没有执行调用工具,获取资源的能力。因此定义一套让大模型调用外部能力的通用协议很重要。MCP(Model Context Protocol)是一套让…

【开题答辩全过程】以 “辛巴克餐饮”小程序为例,具备答辩的问题和答案

【开题答辩全过程】以 “辛巴克餐饮”小程序为例,具备答辩的问题和答案pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: …

2025年一体化雨水提升泵站厂家权威推荐榜单:污水提升泵站/一体化污水泵站/一体化雨水泵站源头厂家精选

在市政排水与水资源管理领域,一体化雨水提升泵站已成为现代城市基础设施的核心组成部分,其高效性能直接关系到城市防洪排涝能力与水环境保护质量。 随着全球城市化进程加速,市政排水系统面临前所未有的压力。据最新…

STM32软件I2C读写AT24C64 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

bcc

bcc原理从内核中获取数据。 整个工具的核心原理是利用 eBPF 技术,在内核中与块设备 I/O 相关的关键函数上设置探针(Tracepoint),从而在几乎无开销的情况下捕获 I/O 请求的开始和结束时间,计算出延迟,并将结果存入…

手写ibatis

通用 Mapper:提供通用的 CRUD 方法。条件构造器:支持链式调用,构建查询条件。分页查询:支持 Oracle 的分页查询。连表查询:支持 JOIN 查询。指定字段查询:支持动态选择查询字段。注解支持:通过注解配置实体类和…

读书笔记:解锁数据库查询新姿势:函数索引让你的搜索又快又准

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。本文为个人学…

国产IPD项目管理软件推荐|别再靠 Excel 推 IPD 了!帮你把IPD流程从“纸上”搬进系统

本文盘点了国内能真正支撑 IPD 流程落地的几款软件,从配置灵活、可视化程度高的飞书项目,到深度面向研发的禅道,覆盖制造业、硬件、互联网等多场景。看完你就能判断:哪一款最适合你的组织,帮你实现从立项到评审、…

【源码解读之 Mybatis】【核心篇】--第7篇:ParameterHandler参数处理机制

【源码解读之 Mybatis】【核心篇】--第7篇:ParameterHandler参数处理机制第7篇:ParameterHandler参数处理机制 1. 学习目标确认 1.0 第6篇思考题解答 在深入学习ParameterHandler参数处理机制之前,让我们先回顾并解…

[linux] 文件夹可写权限的关闭和打开

设置仅可读:chmod -R a-w <folder_path>打开写权限:chmod -R 766 <folder_path>

2025年教室护眼灯厂家权威推荐榜单:led教室灯/幼儿园教室灯/教室照明灯具源头厂家精选

随着社会对青少年视觉健康的日益关注,教室照明环境已成为学校建设的重点环节。专业的教室护眼灯不仅能有效降低学生近视发生率,还能提升学习效率。本文将基于行业调研与公开数据,对当前市场上具有代表性的教室护眼灯…

2025年自动定量灌装机厂家权威推荐榜单:称重灌装机/膏状灌装机/瓶灌装机源头厂家精选

在当今工业化进程中,自动定量灌装设备作为生产线核心环节,其技术水平直接影响企业生产效益与产品质量。随着智能制造的深入推进,灌装设备行业正经历着从机械化向数字化、智能化的重要转型。本文将基于行业数据与技术…

厨房电子秤芯片方案:SIC8833

本文介绍了采用SIC8833QFN32单片机开发的一款5KG量程,0.1g精度的厨房电子秤。该秤具备自动调零、2段自动标定功能,支持USB充电,并能进行模式和单位转换。用户可通过MODE和UNIT键在重量、水体积、牛奶体积模式以及公…

备份恢复:backup database format plus archivelog归档备份集路径与数据库format指定不一致

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。备份恢复:b…

在MCUXpresso IDE中建立使用静态库的工程 - 指南

在MCUXpresso IDE中建立使用静态库的工程 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", …

从“天书”到源码:HarmonyOS NEXT 崩溃堆栈解析实战指南

本文详解如何利用 hiAppEvent 监控并获取 sourcemap、debug so 等核心产物,剖析了 hstack 工具如何将混淆的 Native 与 ArkTS 堆栈还原为源码,助力开发者掌握异常分析方法,提升应用稳定性。作者:杨兰馨(楠瑆) 背…

2025年江苏博士后微服务公司权威推荐榜单:博士后服务团/高层次人才服务/高层次人才引进源头公司精选

汇聚顶尖人才资源,构建创新驱动发展新引擎 在创新驱动发展的时代背景下,江苏省作为科技与人才高地,对博士后等高层次人才的需求日益增长。博士后微服务机构作为连接政府、企业、高校和人才的桥梁,已成为推动区域科…

RFSOC学习记录(六)混频模式分析

RFSOC学习记录(六),简要介绍混频模式以及利用xilinx官方频率规划器介绍混频​ 混频 混频器(Mixer)是RFSOC通过ip核实现在数字域的频率搬移,主要功能是在不改变采样率的情况下,把信号的频谱中心移动到目标频率附…

每周读书与学习-JMeter主要元件详细介绍(二)函数助手

每周读书与学习是由清华大学出版社出版的《JMeter核心技术、性能测试与性能分析》一书的作者推出,分享作者多年的IT从业经历,希望对很多计算机科学技术IT类专业毕业生以及IT从业者有所帮助。 1、函数助手 函数助手是…

Launcher 桌面源码笔记一(3D车模桌面)

Launcher 桌面源码笔记一(3D车模桌面)3D车模通过TaskView显示在Launcher,首先需要知道,为什么要用TaskView,而不是Activity,然后在说加载流程 1、surface比activity等效率更高,特别是针对车模跟地图等重量级场景…