使用一个名称的全局链接变量

时间:2016-10-03 08:35:18

标签: c linker global-variables

我正在尝试在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中甚至可能吗?我想避免任何配置时头文件生成。

1 个答案:

答案 0 :(得分:1)

我建议不要使用链接器和C语言来隐式解决这个问题。

相反,在您的发行版中专门设置一个plugins文件夹,并检测,加载和初始化在运行时放置在那里的任何共享库。