我目前正在尝试使用Qt的 QPluginLoader 来构建插件系统。在我的插件中,我将编译为DLL(.so),我需要使用一些编译成主二进制文件的类(它将加载插件)。
这不起作用,因为在运行时通过 QPluginLoader 加载将失败并显示错误消息:无法加载库... plugin.so.1.0.0:undefined symbol。 .. 的
所以符号实际上是我的主二进制文件,我想在我的DLL中使用它们......但为什么这些符号不可用于DLL?是否有可能以某种方式实现这一目标? (希望有些神奇的编译标志......)
注意:我可以将主程序的源代码编译到我的DLL中,但这在构建插件系统时听起来很愚蠢!
答案 0 :(得分:0)
编译标志 -export-dynamic 将解决此问题。以下是gcc文档中的描述:
将标志-export-dynamic传递给支持它的目标上的ELF链接器。这指示链接器将所有符号(不仅是已使用的符号)添加到动态符号表中。 dlopen的某些用途需要此选项,或允许从程序中获取回溯。