标准的libdl API
在RT-Thread dlmodule中也支持POSIX标准的libdl API,类似于把一个动态库加载到内存中(并解析其中的一些符号信息),由这份动态库提供对应的函数操作集。支持的libdl API包括如下。
libdl API需要包含的头文件
- #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错误。