Linux动态加载共享库,Linux共享库的动态加载(附测试案例)

共享库的动态加载是指可以在程序运行的过程中去加载所需的共享库。常用于某些系统或者应用程序的自动升级。

在C语言的源程序动态加载共享库,需要调用一组特殊的函数,它们被声明于一个专门的头文件dlfcn.h,并在一个独立的库中予以实现。使用这组函数需要包含此头文件,并链接该库。

使用共享库的动态加载时需要用到的函数

1、dlopen函数:打开一个动态链接库,并返回动态链接库的句柄

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

参数解析:

1)字符串形式的文件名(路径名),主要用于指定共享库文件名

2)加载共享库的方式,常用方式如下:

RTLD_LAZY - 延迟加载

RTLD_NOW - 立即加载

返回值:成功时返回所对应的句柄(地址)信息,失败返回NULL;

2、dlsym函数:根据动态链接库操作句柄与符号,返回符号对应的地址

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

参数解析:

1)表示具体的句柄信息,也就是dlopen函数的返回值;

2)字符串形式的符号/标识符,通常指“函数名”;

返回值:成功返回函数对应的地址信息,失败返回NULL;

3、dlclose函数:用于关闭指定句柄的动态链接库,只有当此动态链接库的使用计数为0时,才会真正被系统卸载。

int dlclose(void *handle);

参数解析:

具体的句柄信息,也就是dlopen函数的返回值。

4、dlerror函数:

可以返回出错信息,返回值为NULL时表示操作函数执行成功。

char *dlerror(void);

参数解析:

具体的句柄信息,也就是dlopen函数的返回值。

该函数主要用于获取dlopen()/dlsym()/dlclose()函数调用期间产生的错误信息,如果没有产生错误,则返回NULL;

这里用上一篇文章中生成的共享库作为需要打开的共享库

链接地址:

Linux C语言高级编程之共享库(附测试案例)

http://www.voidcn.com/article/p-guqysezi-bqy.html

目录结构如下图:

5abfd33d4918248e14c1244a6ae3fc33.png

2、测试代码

8ebb4f7cc189fb4dc08feab19ce67d8c.png

3、调用方式及结果如下:

809baf45fe2abe846aa3cb9a81916495.png

这里使用-ldl选项指明生成的对象模块需要使用共享库。

以下是我的个人公众号,主要作为C/C++语言技术分享使用,该公众号里干货满满,如果您有对此博文的疑问或者java方面的问题也可以添加公众号交流讨论。最后,再次希望您能添加关注,互相交流互相学习共同进步:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值