使用加载二进制文件中的DLL代码

时间:2014-11-18 00:31:51

标签: c++ qt plugins dll shared-libraries

我目前正在尝试使用Qt的 QPluginLoader 来构建插件系统。在我的插件中,我将编译为DLL(.so),我需要使用一些编译成主二进制文件的类(它将加载插件)。

这不起作用,因为在运行时通过 QPluginLoader 加载将失败并显示错误消息:无法加载库... plugin.so.1.0.0:undefined symbol。 ..

所以符号实际上是我的主二进制文件,我想在我的DLL中使用它们......但为什么这些符号不可用于DLL?是否有可能以某种方式实现这一目标? (希望有些神奇的编译标志......)

注意:我可以将主程序的源代码编译到我的DLL中,但这在构建插件系统时听起来很愚蠢!

1 个答案:

答案 0 :(得分:0)

编译标志 -export-dynamic 将解决此问题。以下是gcc文档中的描述:

  

将标志-export-dynamic传递给支持它的目标上的ELF链接器。这指示链接器将所有符号(不仅是已使用的符号)添加到动态符号表中。 dlopen的某些用途需要此选项,或允许从程序中获取回溯。