我正在尝试在C程序中实现一些插件系统。插件将被编译为共享库并在编译期间进行链接。
假设我有一个单链表结构定义:
struct plugin_iface
{
int data,
struct plugin_iface* next
};
每个插件都会创建此结构的全局实例,并且所有这些实例都具有相同的名称:
struct plugin_iface IfaceList =
{
.data = 42,
.next = &IfaceList
} // Defined in the global scope in each plugin
正如我所料,next
指向其父亲 - 在此插件中。值得一提的是,这样的方案构建和链接没有错误。如果我做
extern struct plugin_iface IfaceList;
在main.c
中,它解决了插件中构建并链接最新版本的实例。
现在我想要实现的是让所有这些变量实例形成一个链表。该列表的每个节点都代表一个插件的接口。这在C中甚至可能吗?我想避免任何配置时头文件生成。
答案 0 :(得分:1)
我建议不要使用链接器和C语言来隐式解决这个问题。
相反,在您的发行版中专门设置一个plugins
文件夹,并检测,加载和初始化在运行时放置在那里的任何共享库。