咳咳,在自己写的函数中加载一个动态库。
----头文件 #include<dlfcn.h>
有四位伙计: dlopen(),
dlsym(),
dlclose(),
dlerror().
接下来一一登场!
在编译时要加入 -ldl : 如: gcc test.c -o test -ldl
1, dlopen() 使用指定模式,打开指定的动态链接库文件,并返回一个句柄给调用进程,失败的话返回NULL。
函数原型:
void * dlopen(const char* pathname, int mode);
pathname: 指定库的路径和名字。
mode: 打开模式。有以下几种:
a.解析方式:
RTLD_LAZY 暂缓决定,等有需要时再解出符号。
RTLD_NOW 立即决定,返回前解除所有为决定的符号。
b.作用范围,可与解析方式通过"|"组合使用
RTLD_LOCAL 动态库中定义的符号不能被其后打开的其他库重定位,缺省为此。
RTLD_GLOBAL 动态库中定义的符号可被其后打开的其他库重定位。
详细的英文解释:
http://www.9linux.com/dlsym.html
2, dlsym()调用使用dlopen()打开的库中的函数的地址。
函数原型:
void* dlsym(void* handle,const char* symbol);
handle是由dlopen打开动态链接库后返回的指针,symbol就是要求获取的函数名称,
返回值是void*,指向函数的地址,共调用使用。
3,dlclose() 关闭指定句柄的动态连接库,只有当词是动态链接库的使用计数为0时,才会真正被系统卸载。
函数原型:
int dlclose(void* handle);
4,dlerror()当动态链接库操作函数执行失败时,dlerror可以返回出错信息,返回值为NULL时表示操作函数执行成功。
函数原型:
const char* dlerror(void);
一个例子:
这篇博客介绍了如何在Linux环境下手动加载动态库,主要涉及dlopen()、dlsym()、dlclose()和dlerror()四个关键函数。dlopen用于打开动态链接库,dlsym获取库中函数的地址,dlclose关闭库,而dlerror则用于获取错误信息。示例代码展示了如何使用这些函数来调用动态库中的printf函数。
566

被折叠的 条评论
为什么被折叠?



