标准的libdl API

在RT-Thread dlmodule中也支持POSIX标准的libdl API,类似于把一个动态库加载到内存中(并解析其中的一些符号信息),由这份动态库提供对应的函数操作集。支持的libdl API包括如下。

libdl API需要包含的头文件

  1. #include <dlfcn.h>

void dlopen (const char pathname, int mode);

函数参数

参数 描述
pathname 动态库路径名称
mode 打开动态库时的模式,在RT-Thread中并未使用

函数返回

打开成功,返回动态库的句柄指针(实质是struct dlmodule结构体指针);否则返回NULL

这个函数类似dlmodule_load的功能,会从文件系统上加载动态库,并返回动态库的句柄指针。

voiddlsym(void handle, const char *symbol);

函数参数

参数 描述
handle 动态库句柄,应该是dlopen的返回值
symbol 要返回的符号地址

函数返回

打开成功,返回对应符号的地址,否则返回NULL。

这个函数在动态库handle中查找是否存在symbol的符号,如果存在返回它的地址。

int dlclose (void *handle);

函数参数

参数 描述
handle 动态库句柄

函数返回

关闭成功,返回0;否则返回负数。

这个函数会关闭handle指向的动态库,从内存中卸载掉。需要注意的是,当动态库关闭后,原来通过dlsym返回的符号地址将不再可用。如果依然尝试去访问,可能会引起fault错误。