我正在用 C 语言编写一个程序,它允许用户实现自定义“函数”以由各种解释器运行。我还希望允许用户用纯 C 语言编写这些自定义函数,然后动态加载。为了做到这一点,我创建了两个结构,一个用于解释函数,一个用于本地函数。
这是一个简化的示例:
struct func_lang {
bool is_native;
char* identifier;
// various other properties
}
typedef void (*func_native_ptr)(int);
struct func_native {
bool is_native;
char* identifier;
func_native_ptr func_ptr;
}
然后我使用identifier
每个结构的属性将它们放入一个哈希表中,然后我可以使用它在运行时执行它们。
我的问题实际上来自另一端,加载的库。我希望能够允许加载的库“发布”他们想要插入列表的函数。例如,也许有这样的功能:
void register_func_native(char* identifer, func_native_ptr func_ptr);
然后,当我init
从库中调用一个函数时,他们可以调用这个函数将函数插入到哈希表中。
这行得通吗?我对如何register_func_native
链接函数有点困惑,因为加载的库需要它,但必须由加载器本身定义。我的加载器功能是否需要在另一个共享库中实现,然后可以在运行时链接?