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

时间:2017-02-02 07:40:23

标签: c++ linux windows dll

我已经阅读了Linux调用dlopen()dlsym()的文档,它们分别打开了一个动态库并在库中加载了一个符号。

这些调用似乎等同于Windows“LoadLibrary()GetProcAddress()

我在这篇文章中读到了“Windows不支持正确的动态链接”:Running LLVM passes on Windows 10 gives no output in terminal?

Linux和Windows动态库调用有什么不同?

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

1 个答案:

答案 0 :(得分:3)

Windows 支持正确的动态链接。区别在于Windows不支持不正确的动态链接,您可以将可执行文件链接到库(即错误的方式)。这个错误在Windows上是不可能的,因为它的可执行文件没有导出表。

那就是说,你的逻辑有点瑕疵。即使在Windows上,可执行文件和动态库也没有太大差别。 LoadLibrary实际上会加载可执行文件;它失败了GetProcAdddress

对于插件逻辑,使用抽象(纯虚拟)类作为接口在C ++中很容易排列。