C语言(支持插件的软件实现原理)
2016-03-12 17:08
387 查看
平常使用的库文件分为静态库和动态库,而用的最多的动态库还分为静态联编和动态加载两种方式,所谓的动态加载就是插件式管理动态库,是非常实用的技术。
拓展:
假设有两个库,一个叫libxxx.so,一个叫libyyy.so,他们都实现了函数init(),但是功能不同,现在我们可以使用以下函数来动态加载指定的动态库:
void *handle = dlopen("libxxx.so", RTLD_NOW); // 获得libxxx.so的句柄handle
void *p = dlsym(handle, "init"); // 获取对应的init函数指针
此后的代码,就可以用指针p来调用libxxx.so中的init()了。如果要调用另一个库的init(),只需要让dlopen()指定加载libyyy.so即可。这就是所谓的插件。
相关文章推荐
- c语言:编写一个输出链表的函数print
- c语言:写一个函数建立一个有3名学生数据的单向动态链表
- c语言之位域 -- 减少变量空间的有效利器
- c语言:建立简单的静态链表,它由3个学生数据的结点组成,要求输出各结点的数据
- C++读写二进制文件
- VC++2005 使用调用webserver ,使用MSXML读取XML文件
- 《你必须知道的495个C语言问题》读书笔记之第8-10章:字符串、布尔类型和预处理器
- 软件工程课程作业(二)--四则运算2改进版(c++)
- HDOJ 1087Super Jumping! Jumping! Jumping!解题报告
- C语言实现四则运算
- VC++程序开机自动启动
- STL 容器特点简单总结
- 编写C++程序使DirectShow进行视频捕捉
- 链表(list)的实现(c语言)
- C++ Primer 5th - 1.1 编写一个简单的C++程序
- C/C++基础知识(一)数组和指针
- (各个公司面试原题)在线做了一套CC++综合測试题,也来測一下你的水平吧(二)
- C++第1-1次上机实验
- C语言中a=b=c,a=b==c,a==(b=c),a==(b==c)的简单分析
- 详解C++循环创建多级目录及判断目录是否存在的方法