Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用加载二进制文件的DLL中的代码_C++_Qt_Plugins_Dll_Shared Libraries - Fatal编程技术网

C++ 使用加载二进制文件的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不可用?有可能以某种方式实现这一点吗?(一些神奇的旗帜) 注意:我可以将主程序的源代码编译到我的

我目前正在尝试使用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。