2016 - 2024

感恩一路有你

共享库如何动态加载

浏览量:4175 时间:2024-06-28 07:26:38 作者:采采

在计算机编程中,动态加载库(dynamically loaded (DL) libraries)是指在程序运行过程中可以加载的函数库,不像共享库那样在程序启动时加载。动态加载对于实现插件和模块非常有用,因为它们允许程序在需要时等待插件的加载。

dlopen函数

dlopen函数位于dlfcn.h头文件中,其原型为:

```c

void *dlopen(const char *filename, int flag);

```

第一个参数是字符形式的共享库函数名,第二个参数是标志,可以选择延迟加载(RTLD_LAZY)或立即加载(RTLD_NOW)。函数返回一个通用类指针,成功时返回句柄(可以暂时理解为共享库的首地址),失败时返回NULL。dlopen函数主要用于打开和加载动态库。

dlerror函数

dlerror函数的原型为:

```c

char *dlerror(void);

```

它主要用于获取dlopen等函数调用过程中发生的最近一个错误的详细信息。

dlsym函数

dlsym函数的原型为:

```c

void* dlsym(void *handle, const char *symbol);

```

第一个参数是句柄,也就是dlopen函数的返回值,第二个参数是字符串形式的符号,表示函数名。函数返回成功时,返回函数在内存中的地址,失败时返回NULL。dlsym函数主要用于根据句柄和函数名获取在内存中对应的地址。

dlclose函数

dlclose函数的原型为:

```c

int dlclose(void *handle);

```

该函数主要用于关闭参数handle指定的共享库,成功时返回0,失败时返回非0。当共享库不再被任何程序使用时,可以通过调用dlclose函数回收共享库所占用的内存空间。

注意:在编译链接时,需要增加选项“-ldl”,以便正确链接动态加载库。

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。