在动态加载共享库之前检查共享库的兼容性。

| 我有一个程序和一堆\“ plugs-ins \”(共享库),主程序在运行时会按要求加载。 插件可以访问程序的所有内部全局数据结构/功能,因此每次内部数据结构发生更改时,都没有选择保留版本的选项。 我正在寻找一种方法,主程序可以检查是否支持尝试加载的插件(使用适当的数据结构)。 您有没有想到的创意方法?     
已邀请:
插件中有一个函数可返回有关其支持的协议版本的信息(插件的协议不限于它提供的协议,它也是调用程序所要求的。)     
AProgrammer的答案(或简单地导出带有版本号的全局变量)将起作用,但是请记住,没有解决方案能够万无一失,也不能对付恶意插件文件。加载的模块以与程序相同的特权在与程序相同的内存空间中运行,不幸的是,动态加载器会在您能够查询版本或自己进行任何检查之前在插件中愉快地运行全局构造函数。 (请问有人有链接到被认为有害的全球构造者吗?) 无论如何,如果插件架构是您的设计,我强烈建议您禁止在插件规范中使用全局构造函数。当然,您不能在运行时强制执行此操作,但是至少您可以责怪任何违反协议的事情破坏插件的作者。     

要回复问题请先登录注册