Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.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++ “是什么意思?”;Windows不支持';“不支持正确的动态链接”;_C++_Linux_Windows_Dll - Fatal编程技术网

C++ “是什么意思?”;Windows不支持';“不支持正确的动态链接”;

C++ “是什么意思?”;Windows不支持';“不支持正确的动态链接”;,c++,linux,windows,dll,C++,Linux,Windows,Dll,我已经阅读了Linux调用的文档,这两个调用分别打开动态库和在库中加载符号 这些调用似乎相当于Windows的LoadLibrary()和GetProcAddress() 我在这篇文章中读到“Windows不支持正确的动态链接”: Linux和Windows动态库调用不同的原因是什么 Linux上的动态库可以在可执行文件中加载符号的唯一区别是什么?但这意味着可执行文件也是Linux上的库,因为dlopen()在动态库上运行 Windows确实支持正确的动态链接。不同之处在于Windows不支持不

我已经阅读了Linux调用的文档,这两个调用分别打开动态库和在库中加载符号

这些调用似乎相当于Windows的
LoadLibrary()
GetProcAddress()

我在这篇文章中读到“Windows不支持正确的动态链接”:

Linux和Windows动态库调用不同的原因是什么

Linux上的动态库可以在可执行文件中加载符号的唯一区别是什么?但这意味着可执行文件也是Linux上的库,因为
dlopen()
在动态库上运行

Windows确实支持正确的动态链接。不同之处在于Windows不支持不正确的动态链接,即针对库链接可执行文件(即错误的方式)。这个错误在Windows上是不可能的,因为它的可执行文件没有导出表

也就是说,你的逻辑有点缺陷。可执行文件和动态库没有太大区别,即使在Windows上也是如此<代码>加载库实际上将加载可执行文件;失败的是
getprocaddress

至于插件逻辑,在C++中使用抽象(纯虚拟)类作为接口很容易安排。 Windows确实支持正确的动态链接。不同之处在于Windows不支持不正确的动态链接,即针对库链接可执行文件(即错误的方式)。这个错误在Windows上是不可能的,因为它的可执行文件没有导出表

也就是说,你的逻辑有点缺陷。可执行文件和动态库没有太大区别,即使在Windows上也是如此<代码>加载库实际上将加载可执行文件;失败的是
getprocaddress


至于插件逻辑,在C++中使用抽象(纯虚拟)类作为接口很容易安排。<你知道Windows为什么不选择它的可执行文件的输出表吗?你可以链接它显示插件是如何用C++来制作的吗?我想你的意思是“你把一个库链接到一个可执行文件”。@ Shuzheng:这是正确的方法。我所说的显然是错误的方法,即尝试将可执行文件链接到库。至于为什么Windows“选择”不拥有它,这表明默认情况下是拥有这样一个表。但这样的表只有在链接器创建时才存在,这是一个有意识的决定。。因此,正确的问题是为什么Linux和UNIX链接器选择创建导出表。但是您可以使用从库dll中的可执行文件导出的函数。这些函数必须是dllexport'ed,然后创建一个导出库并在链接库dll时使用它。可执行文件必须是使用DLL的。你知道为什么Windows选择不为其可执行文件输出表吗?你可以链接它显示插件是如何用C++来做的吗?我想你的意思是“你把一个库链接到一个可执行文件”。@ Shuzheng:这是正确的方法。我所说的显然是错误的方法,即尝试将可执行文件链接到库。至于为什么Windows“选择”不拥有它,这表明默认情况下是拥有这样一个表。但这样的表只有在链接器创建时才存在,这是一个有意识的决定。。因此,正确的问题是为什么Linux和UNIX链接器选择创建导出表。但是您可以使用从库dll中的可执行文件导出的函数。这些函数必须是dllexport'ed,然后创建一个导出库并在链接库dll时使用它。可执行文件必须是使用dll的文件。