【发布时间】:2014-11-18 00:31:51
【问题描述】:
我目前正在尝试使用Qt的QPluginLoader来构建一个插件系统。在我将编译为 DLL (.so) 的插件中,我需要使用一些编译到主二进制文件中的类(它将加载插件)。
这不起作用,因为在运行时通过 QPluginLoader 加载将失败并显示错误消息:Cannot load library ... plugin.so.1.0.0: undefined symbol 。 ..
所以这些符号实际上在我的主二进制文件中,我想在我的 DLL 中使用它们...但是为什么这些符号对 DLL 不可用?有可能以某种方式实现这一目标吗? (希望有一些神奇的编译标志..)
注意:我可以将主程序的源代码编译到我的 DLL 中,但这在构建插件系统时听起来很愚蠢!
【问题讨论】:
-
.so是共享对象,而不是 DLL。 -
共享对象或动态链接库 - 谁在乎?同一事物的两个名字。在这种情况下,我在 Linux 下编译,如果我在 Windows 下编译,它会有一个 .dll 扩展名。
-
不,阅读Drepper's paper: How To Write Shared Libraries。你会明白
.so是不是 DLL。
标签: c++ qt plugins dll shared-libraries