一般的plugin都是以动态库(可能还会需要些其它资源,这些其它内容我们不关心)形式呈现的,在宿主程序运行期间或启动时加载。
在Linux环境中,负责动态加载共享库的核心开发库是dl库,加载器是ld。dl库提供如下API用于程序运行时加载动态库:
1. void *dlopen(const char *, int flag);
2. void *dlsym(void *handle, const char *symbol);
3. int dllcose(void *handle);
4. char *dlerror();
这些函数这里不解释,man dlopen可以找到相应的文档。
下面是个示例,展示了在Linux环境中,通过主程序(hello_main)调用plugin(hello_ext)的实现方法:
1. hello.h文件(接口)
#ifndef _HELLO_H_
#define _HELLO_H_
typedef void process_fn(int a, int b);
typedef void post_fn(const char *);
struct module_entry
{
process_fn *process;
post_fn *post;
};
typedef void get_entry_fn(struct module_entry *);
#endif //_HELLO_H_
2. hello_main.c文件(主程序)
#include &