dlfcn
dlfcn (Dynamic Loading Functions) 提供 POSIX 标准的动态共享库加载与符号查找功能,支持运行时加载共享库、查找符号地址以及卸载已加载模块。
头文件清单
接口清单
| 接口名称 | 功能简述 |
|---|---|
| dlclose | 卸载由 dlopen 加载的动态共享库模块 |
| dlerror | 获取最近一次动态加载相关接口调用的错误信息 |
| dlopen | 动态加载一个共享库模块并返回模块句柄 |
| dlsym | 在已加载模块或系统符号表中查找指定符号的地址 |
Functions
dlclose
头文件清单
功能说明
- 卸载由 dlopen 加载的动态共享库模块
- 释放模块占用的系统资源
- 调用成功后模块句柄不再有效
前置条件
- 调用时序约束:当前接口必须在 dlopen() 成功返回后调用
- 依赖关系:当前接口依赖 LOSCFG_KERNEL_DYNLOAD 宏已开启
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| handle | void * | dlopen 返回的模块句柄 | 非NULL |
返回值
- 返回类型:int
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 0 | 卸载成功 | 模块成功卸载 |
| -1 | 卸载失败 | 模块卸载失败或不支持动态加载 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| LOSCFG_KERNEL_DYNLOAD | 功能宏 | 支持动态加载接口功能 | n |
dlerror
头文件清单
功能说明
- 获取最近一次 dlopen、dlsym 或 dlclose 调用产生的错误描述字符串
- 调用后清除内部错误状态,连续调用无新错误时返回 NULL
- 自上次调用 dlerror 以来若无动态加载相关错误发生,返回 NULL
前置条件
- 调用时序约束:当前接口需在 dlopen、dlsym 或 dlclose 调用之后使用以获取有意义的错误信息
- 依赖关系:当前接口依赖 LOSCFG_KERNEL_DYNLOAD 宏已开启
返回值
- 返回类型:char *
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 非NULL | 错误描述字符串 | 自上次 dlerror 调用以来有动态加载相关错误发生 |
| NULL | 无错误 | 自上次 dlerror 调用以来无动态加载相关错误发生 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| LOSCFG_KERNEL_DYNLOAD | 功能宏 | 支持动态加载接口功能 | n |
dlopen
头文件清单
功能说明
- 根据指定的文件路径动态加载共享库模块
- 按照指定的加载标志决定符号解析方式
- 加载成功返回模块句柄,失败返回 NULL
前置条件
- 调用时序约束:当前接口需要在系统初始化完成后调用
- 依赖关系:当前接口依赖 LOSCFG_KERNEL_DYNLOAD 和 LOSCFG_DYNLOAD_DYN_FROM_FS 宏已开启
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| filename | const char * | 共享库文件路径 | 非NULL,有效的文件系统路径 |
| flag | int | 加载标志,控制符号解析和绑定行为 | RTLD_LAZY(1) / RTLD_NOW(2) / RTLD_NOLOAD(4) / RTLD_NODELETE(4096) / RTLD_GLOBAL(256) / RTLD_LOCAL(0) |
返回值
- 返回类型:void *
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 非NULL | 模块加载成功 | 共享库成功加载并返回句柄 |
| NULL | 模块加载失败 | 文件不存在、格式错误或不支持动态加载 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| LOSCFG_KERNEL_DYNLOAD | 功能宏 | 支持动态加载接口功能 | n |
| LOSCFG_DYNLOAD_DYN_FROM_FS | 特性宏 | 支持从文件系统加载共享库特性 | y |
dlsym
头文件清单
功能说明
- 在已加载模块的符号表中查找指定名称的符号
- 支持通过特殊句柄查找系统级符号
- 查找成功返回符号地址,失败返回 NULL
前置条件
- 调用时序约束:当前接口必须在 dlopen() 成功返回后调用
- 依赖关系:当前接口依赖 LOSCFG_KERNEL_DYNLOAD 宏已开启
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| handle | void *__restrict | dlopen 返回的模块句柄,或特殊句柄 | RTLD_DEFAULT / RTLD_NEXT 或 dlopen 返回的有效句柄 |
| symbol | const char *__restrict | 需要查找的符号名称 | 非NULL,有效的符号名字符串 |
返回值
- 返回类型:void *
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 非NULL | 查找成功 | 符号在模块中找到并返回其地址 |
| NULL | 查找失败 | 符号未找到或不支持动态加载 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| LOSCFG_KERNEL_DYNLOAD | 功能宏 | 支持动态加载接口功能 | n |