C 插件系统:符号查找错误



我正在编写一个将其他 3 个模块分开的插件系统:

  1. plugin_system.c - 系统的核心
  2. list.c - 包含用于插件存储的链表实现
  3. plugin_interface.h - 包含插件所需的声明,没有与

plugin_interface.h 仅包含以下类型和函数:

 extern int plugin_register(PluginManager *plug_manager, const char *name, Plugin *plug);

plugin_system.c 中定义

加载插件时,插件系统会查找一个功能init_plugname()并调用它,该函数必须调用plugin_register来注册插件。

该程序是用复杂的递归 Makefiles 编译的(不是最好的主意),但我试图实现的是:

我在主程序

文件夹中编译插件系统对象,然后将其与主程序链接。从make执行:

gcc -Wall -O2 -std=gnu99  -D DEBUG -g -fPIC -c -o /home/kowa/code/reseaux/projet/ringo/c/bin/list.o list.c
gcc -Wall -O2 -std=gnu99  -D DEBUG -g -fPIC -c -o /home/kowa/code/reseaux/projet/ringo/c/bin/plugin_system.o plugin_system.c

插件编译后跟gcc -fPIC -c -o plugname.o plugname.c plug_system.o gcc -o plugname.so plugname.o plug_system.o -shared

我尝试在我的主程序中加载插件并收到此错误:

symbol lookup error: ./plugins/zyva.so: undefined symbol: exists

existsplugin_system 模块用来存储插件的列表模块中的一个函数,上面提到的plugin_register函数调用它。

以前从未做过这种系统,我也不是共享库的专家,我想问题在于我如何编译整个项目,我可能会错过一些链接......

我只是忘了将插件与 plugin_system.o 使用的 list.o 链接......

最新更新