序言:
最近开始入手Linux初级编程,一开始觉的蛮新鲜的,毕竟以前在学校学的好像有点过家家的感觉,这次出来培训,抓住这个机会好好把这个过程走了一遍...前面的也就不说了学了GCC,GDB,SHELL一些基本的使用,今天老师要我们模拟一个插件其中用到了最近所学的动态库,个人觉得还是蛮有意义的,好吧!废话不说浅谈自己对这个作业的一些原理的讲解吧。
一、为什么要做插件
我们知道某个已经发布的应用程序软件,要是想给它加上某些功能,如果直接去修改原有设计,改变原来的结构而达到目的,这是不太理智的。首先工作量很大,其次不利于扩展,每次增加某个功能,都得从新发布这个软件。。。这样插件的优势就体现出来了,在这里由于鄙人才疏学浅,只说下用C语言访问动态库的基本机制原理。
二、C语言访问动态库的基本接口
这里主要涉及到以下几个接口dlopen(),dlerror(),dlsym(),dlclose(),这些接口都包含在<dlfcn.h>这个文件里。
dlopen:用于打开制定路径下的库文件,可以选择延迟加载或者打开立刻加载,返回一个句柄,用于对动态库进一步操作
dlerror:这个接口用于返回对库文件操作的一些错误信息。
dlsym:用于从对应的库内取出对应的函数指针,若函数不存在则返回NULL。
dlclose:这个接口用于关闭动态库,终止对库的操作,之后的一系列操作会出错。
三、插件与应用模块交互
首先,需要获取库的路径可以有几种方式,第一、程序固态指定。第二、命令行输入。第三、构建一个查找表指定对应库的路径以及路口。
这里主要说说第二种方法,第三种方式,我还没尝试。
首先,启动运行程序,命令行输入库文件的路径,主函数获取命令行输入,并调用解析接口。在这里得说明一个概念,插件设计者必须对主应用开放的注册接口熟悉,不同类型的插件执行不同的添加接口,这里可以做一张映射表,可以灵活的实现不同类型控件的添加。