我已经阅读了Linux调用dlopen()
和dlsym()
的文档,它们分别打开了一个动态库并在库中加载了一个符号。
这些调用似乎等同于Windows“LoadLibrary()
和GetProcAddress()
。
我在这篇文章中读到了“Windows不支持正确的动态链接”:Running LLVM passes on Windows 10 gives no output in terminal?。
Linux和Windows动态库调用有什么不同?
Linux上的动态库可以在可执行文件中加载符号的唯一区别是什么?但这意味着可执行文件也是Linux上的库,因为dlopen()
对动态库进行操作。
答案 0 :(得分:3)
Windows 支持正确的动态链接。区别在于Windows不支持不正确的动态链接,您可以将可执行文件链接到库(即错误的方式)。这个错误在Windows上是不可能的,因为它的可执行文件没有导出表。
那就是说,你的逻辑有点瑕疵。即使在Windows上,可执行文件和动态库也没有太大差别。 LoadLibrary
实际上会加载可执行文件;它失败了GetProcAdddress
。
对于插件逻辑,使用抽象(纯虚拟)类作为接口在C ++中很容易排列。