我想做应用程序,它可以用外部模块编译,例如在 php.ini 中。在php中,你可以在运行时加载模块,或者将php与模块一起编译,这样模块就可以在运行时不加载。但我不明白如何做到这一点。如果我在 module.c 中有一个模块并且有一个名为 say_hello 的函数,如果你明白我的意思,我如何将它注册到主应用程序?
/* module.c */
#include <stdio.h>
// here register say_hello function, but how, if i can't in global scope
// call another function?
void say_hello()
{
printf("hello!");
}
如果我将所有这些文件(主应用程序 + 模块)编译在一起,则不会从主应用程序中引用 say_hello 函数,因为只有当用户在其代码中调用它时才会调用它。所以我怎么能对我的应用说,嘿,有 say_hello 函数,如果有人想调用它,你知道它存在。
EDIT1:我需要在运行时有类似表的东西,在那里我可以看到用户调用的函数是否存在(有 C equivavent)。头文件对我没有帮助。
EDIT2:我的应用程序是为我的脚本语言解释的。
EDIT3:如果有人在php中调用函数,php解释必须知道该函数存在。我知道动态链接,如果加载了 .so 或 .dll,则调用一些启动例程,您可以在该 dll 中简单地注册函数,因此 php 解释可以看到,如果某些模块注册了例如名为“say_hello”的函数。但是,如果我想用例如 gd 支持编译 php,那么如何将 gd 函数注册到一些 php 函数列表、哈希表或其他什么?