我正在编写一个插件系统,它与其他3个模块分开:
plugin_interface.h只包含类型和函数:
extern int plugin_register(PluginManager *plug_manager, const char *name, Plugin *plug);
这是在plugin_system.c中定义的
加载插件时,插件系统会查找函数init_plugname()
并调用它,该函数必须调用plugin_register
来注册插件。
该程序使用复杂的递归Makefile编译(不是最好的主意),但我尝试实现的是:
我在主程序文件夹中编译插件系统对象,然后将其与主程序链接。 从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
exists
是plugin_system模块用来存储插件的list模块中的一个函数, plugin_register
提到的plugin_register
函数调用它。
我之前从未做过那种系统而且我不是共享库的专家,我想问题来自于我如何编译整个项目,我可能会错过一些联系……
我只是忘了将插件链接到plugin_system.o使用的list.o …
以上就是c/c++开发分享C pluginsystem:符号查找错误相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/519589.html