C++ 使用加载二进制文件的DLL中的代码
我目前正在尝试使用Qt的QPluginLoader来构建一个插件系统。在我的插件中,我将编译为DLL(.so),我需要使用一些编译成主二进制文件的类(加载插件) 这不起作用,因为在运行时通过QPluginLoader加载将失败,并显示错误消息:无法加载库。。。plugin.so.1.0.0:未定义的符号 所以这些符号实际上在我的主二进制文件中,我想在我的DLL中使用它们。。。但是为什么这些符号对DLL不可用?有可能以某种方式实现这一点吗?(一些神奇的旗帜)C++ 使用加载二进制文件的DLL中的代码,c++,qt,plugins,dll,shared-libraries,C++,Qt,Plugins,Dll,Shared Libraries,我目前正在尝试使用Qt的QPluginLoader来构建一个插件系统。在我的插件中,我将编译为DLL(.so),我需要使用一些编译成主二进制文件的类(加载插件) 这不起作用,因为在运行时通过QPluginLoader加载将失败,并显示错误消息:无法加载库。。。plugin.so.1.0.0:未定义的符号 所以这些符号实际上在我的主二进制文件中,我想在我的DLL中使用它们。。。但是为什么这些符号对DLL不可用?有可能以某种方式实现这一点吗?(一些神奇的旗帜) 注意:我可以将主程序的源代码编译到我的
注意:我可以将主程序的源代码编译到我的DLL中,但在构建插件系统时,这听起来很愚蠢 编译标志-export dynamic将解决此问题。以下是gcc文档中的描述: 将flag-export-dynamic传递给支持它的目标上的ELF链接器。这指示链接器将所有符号(而不仅仅是已使用的符号)添加到动态符号表中。此选项对于dlopen的某些使用或允许从程序中获取回溯是必需的
所以是一个共享对象,而不是DLL.shared对象或动态链接库-谁在乎呢?同一事物有两个名字。在本例中,我是在Linux下编译的,如果我在Windows下编译,它将有一个.dll扩展名。你会明白,
。所以
不是DLL。