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