C语言插件开发模式

这篇博客探讨了如何在C语言中实现模块化的插件开发,利用动态库(在Windows上是dll,在Unix/Linux上是so)来实现按需加载和卸载功能。通过dlopen和dlsym函数,可以在运行时找到并调用动态库中的函数,例如在Unix/Linux环境下,使用RTLD_LAZY和RTLD_NOW标志来控制符号解析。文中提供了一个简单的C语言代码示例,演示了如何根据输入加载不同的动态库并执行相应功能。
摘要由CSDN通过智能技术生成

       以前总是不明白为什么不同的模块是相互独立的编译,相互之间不存在的调用关系, 怎么做到在使用的时候加载不使用的时候卸载掉? 现在总算是明白了。其实就是将一个功能做成一个动态库,在window中叫dll,在Unix/Linux中叫做so。通过配置在运行的时候,在运行的时候,通过一些特殊的函数对dll或者so进行操作。找到函数的地址,调用函数。在使用函数的时候找函数,不是使用的时候释放就可以了。

           我也找不到合适的列子。我直接上代码吧。通过输入不同的so或者dll执行不同的内容。本文件以Unix/Linux中的C语言代码为例子。使用到的知识很简单。就是dlopen和dlsym函数。所有的函数都在dlfcn.h头文件中。

          

void * dlopen( const char * pathname, int mode);

pathname:so或者dll文件的路径,在Linux中必须是以"./"或者"../"开始的相对路径 或者 以"/"开始的绝对路径
mode:解析so或者dll文件的方式,可以取以下值 

RTLD_LAZY:在dlopen返回前,对于动态库中的未定义的符号不执行解析(只对函数引用有效,对于变量引用总是立即解析)。

RTLD_NOW: 需要在dlopen返回前,解析出所有未定义符号,如果解析不出来,在dlopen会返回NULL

打开错误返回NULL

成功,返回库引用

.

 

 

 d
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值