[Linux]使用dlopen、dlsym、dlclose操作访问动态链接库

本文介绍了在Linux下如何利用dlopen、dlsym和dlclose来操作和访问动态链接库,实现程序的插件化扩展。通过示例展示了如何生成.so库文件并动态加载执行库中函数,强调了异步事件驱动模型在保持主程序逻辑不变中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为了使程序方便扩展,具备通用性,可以采用插件形式。采用异步事件驱动模型,保证主程序逻辑不变,将各个业务已动态链接库的形式加载进来,这就是所谓的插件。linux提供了加载和处理动态链接库的系统调用,非常方便。本文先从使用上进行总结,涉及到基本的操作方法,关于动态链接库的本质及如何加载进来,需要进一步学习,后续继续补充。如何将程序设计为插件形式,挖掘出主题和业务之间的关系,需要进一步去学习。

Linux提供了一套API来动态装载库。下面列出了这些API:

- dlopen:在dlopen()函数以指定模式打开指定的动态链接库文件,并返回一个句柄给dlsym()的调用进程。使用dlclose()来卸载打开的库。。
- dlsym:的函数原型是void* dlsym(void* handle,const char* symbol),在打开的库中查找符号的值,handle是由dlopen打开动态链接库后返回的指针,symbol就是要求获取的函数的名称,函数返回值是void*,指向函数的地址,供调用使用。
- dlclose:dlclose用于关闭指定句柄的动态链接库,只有当此动态链接库的使用计数为0时,才会真正被系统卸载。

- dlerror,返回一个描述最后一次调用dlopen、dlsym,或dlclose的错误信息的字符串。

1.生成动态链接库文件.so文件,编译使用命令:

gcc -shared -o hello.so hello.c

hello.c
#include <stdio.h>
void hello(int *x,int y)
{
    printf("x = %d,y = %d\n",*x,y);
}

2.采用上面生成的hello.so,写个测试程序如下:

gcc -o hello_dlopen hello_dlopen.c -ldl

#include <s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值