我目前正在尝试使用Qt的QPluginLoader来构建插件系统。在我将其编译为DLL(.so)的插件中,我需要使用一些编译到主二进制文件中的类(这将加载插件)。
这不起作用,因为在运行时通过QPluginLoader加载将失败,并显示以下错误消息:无法加载库... plugin.so.1.0.0:未定义的符号...
所以这些符号实际上在我的主二进制文件中,并且我想在我的DLL中使用它们。但是为什么这些符号对DLL不可用?是否有可能以某种方式实现这一目标?(希望一些魔术编译标志。)
注意:我可以将主程序的源代码编译到我的DLL中,但这在构建插件系统时听起来很愚蠢!
编译标志-export-dynamic将解决此问题。这是gcc文档中的描述:
在支持它的目标上,将标志-export-dynamic传递给ELF链接器。这指示链接器将所有符号(不仅是已使用的符号)添加到动态符号表中。对于dlopen的某些用途或为了从程序内部获取回溯,此选项是必需的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句