跳转至

dlfcn

dlfcn (Dynamic Loading Functions) 提供 POSIX 标准的动态共享库加载与符号查找功能,支持运行时加载共享库、查找符号地址以及卸载已加载模块。

头文件清单

#include "open_source/musl/include/dlfcn.h"

接口清单

接口名称 功能简述
dlclose 卸载由 dlopen 加载的动态共享库模块
dlerror 获取最近一次动态加载相关接口调用的错误信息
dlopen 动态加载一个共享库模块并返回模块句柄
dlsym 在已加载模块或系统符号表中查找指定符号的地址

Functions

dlclose

int dlclose(void *)

头文件清单

#include "open_source/musl/include/dlfcn.h"

功能说明

  • 卸载由 dlopen 加载的动态共享库模块
  • 释放模块占用的系统资源
  • 调用成功后模块句柄不再有效

前置条件

  • 调用时序约束:当前接口必须在 dlopen() 成功返回后调用
  • 依赖关系:当前接口依赖 LOSCFG_KERNEL_DYNLOAD 宏已开启

入参

名称 参数类型 详细说明 约束取值范围
handle void * dlopen 返回的模块句柄 非NULL

返回值

  • 返回类型:int
返回值 文字含义 触发场景
0 卸载成功 模块成功卸载
-1 卸载失败 模块卸载失败或不支持动态加载

Kconfig配置

配置项 宏类型 说明 默认值
LOSCFG_KERNEL_DYNLOAD 功能宏 支持动态加载接口功能 n

dlerror

char *dlerror(void)

头文件清单

#include "open_source/musl/include/dlfcn.h"

功能说明

  • 获取最近一次 dlopen、dlsym 或 dlclose 调用产生的错误描述字符串
  • 调用后清除内部错误状态,连续调用无新错误时返回 NULL
  • 自上次调用 dlerror 以来若无动态加载相关错误发生,返回 NULL

前置条件

  • 调用时序约束:当前接口需在 dlopen、dlsym 或 dlclose 调用之后使用以获取有意义的错误信息
  • 依赖关系:当前接口依赖 LOSCFG_KERNEL_DYNLOAD 宏已开启

返回值

  • 返回类型:char *
返回值 文字含义 触发场景
非NULL 错误描述字符串 自上次 dlerror 调用以来有动态加载相关错误发生
NULL 无错误 自上次 dlerror 调用以来无动态加载相关错误发生

Kconfig配置

配置项 宏类型 说明 默认值
LOSCFG_KERNEL_DYNLOAD 功能宏 支持动态加载接口功能 n

dlopen

void *dlopen(const char *, int)

头文件清单

#include "open_source/musl/include/dlfcn.h"

功能说明

  • 根据指定的文件路径动态加载共享库模块
  • 按照指定的加载标志决定符号解析方式
  • 加载成功返回模块句柄,失败返回 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

void *dlsym(void *__restrict, const char *__restrict)

头文件清单

#include "open_source/musl/include/dlfcn.h"

功能说明

  • 在已加载模块的符号表中查找指定名称的符号
  • 支持通过特殊句柄查找系统级符号
  • 查找成功返回符号地址,失败返回 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

Macros

RTLD_LAZY

#define RTLD_LAZY   1

RTLD_NOW

#define RTLD_NOW    2

RTLD_NOLOAD

#define RTLD_NOLOAD 4

RTLD_NODELETE

#define RTLD_NODELETE 4096

RTLD_GLOBAL

#define RTLD_GLOBAL 256

RTLD_LOCAL

#define RTLD_LOCAL  0

RTLD_NEXT

#define RTLD_NEXT    ((void *)-1)

RTLD_DEFAULT

#define RTLD_DEFAULT ((void *)0)