问题贴:
http://cloverprince.iteye.com/blog/481307
引用
1. 现有一个主程序用C语言写成。现在要允许第三方开发人员编写扩展的模块,约定第三方开发的模块必须提供一系列已知名称的函数(如 foo(),bar(),baz())。如果要求第三方的模块必须与主程序的二进制代码分开发布,把dll或so丢在某个文件夹内即可被动态装载并使用,应如何实现?
回答:
除了用操作系统提供的接口外,还可以用Glib的简单封装。GLib简单封装了操作系统相关的动态库装载函数,位于GModule中。GModule相当于Library Handle,而g_module_open, g_module_symbol和g_module_close分别对应dlopen, dlsym和dlclose函数。
实现:
接口、动态库同原解
http://cloverprince.iteye.com/blog/481309 ,新的主程序如下:
#include <stdio.h>
#include <stdlib.h>
#include <glib.h>
#include <glib/gstdio.h>
#include <gmodule.h>
#include "plugin-interface.h"
const char * const PLUGINS_PATH = "plugins";
int main(int argc, char** argv) {
GDir *dir;
const gchar *filename;
dir = g_dir_open(PLUGINS_PATH,0,NULL);
while(filename=g_dir_read_name(dir)) {
GModule *module;
char *path;
InitModuleFunc init_func;
PluginInterface iface;
printf("Openning %s ...\n",filename);
path = g_strdup_printf("%s/%s",PLUGINS_PATH,filename);
module = g_module_open(path,G_MODULE_BIND_LAZY);
g_module_symbol(module,"init_module",(void**)(&init_func));
init_func(&iface);
iface.hello();
iface.greet("wks");
g_module_close(module);
g_free(path);
}
g_dir_close(dir);
return 0;
}
编译:
GLib程序的编译可以利用pkg-config辅助设置编译参数
引用
gcc $(pkg-config --cflags --libs glib-2.0 gmodule-2.0) -o main main.c
执行结果略。
分享到:
相关推荐
必备插件sftp : 1,Package Control可以用来install其他package 2,sftp 远程编辑文件:安装:install->sftp具体配置 sftp工具破解 1,下载python字节码反编译工具uncompyle2 (pyc 2 py) ...
解压缩用的rar插件。可以支持通用的格式。完全通用。你可以下载试试看。
UE4、UE5引擎解压缩zip文件插件
电子设计大赛时候做的一个抽题的小插件,基本都是用C#去打开PDF文件的
Moodle官网上的CSV format 只支持最多4个选项的且只有2个正确答案的多选题。不符合国人习惯。稍作修改,使其能支持多个选项(按照ASCII码,从ABCD开始),答案不限的多选题。基于**All-or-Nothing**插件的试题格式,...
apabi reader 4.5.2.1785 破解插件,原来的自签发证书,在winxp sp3 最新更新系统下存在证书验证问题,主要是由于微软最新补丁更新了原来的证书验证漏洞所致,因此会导致软件在联网的情况下出现证书验证问题。...
一款仿学习强国填空题输入的jQuery代码脚本,填空题固定输入字符的数量。 兼容android与iOS手机的浏览器 标签<span></span>即代表填空题的一个空格,提交后获取json数据。
此破解为方正apabi电子图书馆最新4.4.4.1733版本破解插件,压缩包内包括ceb、cebx永不过期补丁、完全解密补丁,以及cebx修改教程。ceb破解补丁修正了win7下不能执行bug。
C#做的自动更新word表、图题注插件(附源码) 插件具体说明: word插件:用来生成需要更新的word插件,除了自动更新题注,还提供自定义删除内容(根据word的页码). 插件xp安装环境:.net3.5、vsto、office2007 win7...
parasoft jtest 9.4 安装文件以及破解 eclipse插件
.net压缩解压缩插件 ICSharpCode.SharpZipLib.dll 里面包含说明和示例demo.cs,引用DLL,看着demo.cs写方法so esay!!!
linux下的rar解压缩插件,可使得系统默认压缩器能够解压rar文件,适用于redhat企业版6,CentOS6等等一些列
discuz论坛插件DZ插件 [图灵]插件绑定域名 插件绑定任意域名
问答插件
discuz论坛插件DZ插件 问题跟踪 简体中文版 1.8.1 .
通过这个插件,可以实现不同域名的双向通信问题,内含demo 配套文章:http://blog.csdn.net/mycwq/article/details/16344171
Chrome插件-《Astro Bot》用新标签页刷编程题.zip,Astro Bot可以在新标签页,展示一道与程序相关的问题或相关新闻
解决Eclipse安装activiti插件报错问题的资源包 错误描述:Cannot complete the install because one or more required items could not be found
2015网易游戏校园招聘笔试题游戏插件研发岗.docx2015网易游戏校园招聘笔试题游戏插件研发岗.docx2015网易游戏校园招聘笔试题游戏插件研发岗.docx2015网易游戏校园招聘笔试题游戏插件研发岗.docx2015网易游戏校园招聘...
第一篇介绍Eclipse平台界面开发的基础知识,包括 SWT控件的使用、界面布局、事件处理等内容;第二篇是插件开发核心技术,主要介绍插件开发的核心知识要点,包括行为(Action)、视图(ViewPart)、编辑器(Editor)...