【问题标题】:QPluginloader error: "Cannot load library: The specified module could not be found" unless the plugin is in the same folder as in .exeQPluginloader 错误:“无法加载库:找不到指定的模块”,除非插件与 .exe 位于同一文件夹中
【发布时间】:2020-12-10 18:29:10
【问题描述】:

我在使用 QPluginloader 加载插件时遇到了一个奇怪的错误。我一共构建了 4 个插件,全部用 Q_PLUGIN_METADATAQ_OBJECTQ_INTERFACES 指定。我可以看到所有插件都已正确构建,并且没有丢失 .dll(使用 Dependency walker 检查)。所有这些插件都放在单独的“插件”文件夹中。

在加载时,可以毫无问题地加载 2 个插件。其他 2 个插件抛出标题中提到的错误。如果我将插件 dll 及其所有依赖项与 .exe 复制到同一文件夹中,QPluginloader 会很好地加载插件。

我错过了什么?

我在 Win 10 x64 上使用 Qt 5.7 和 VS 2015

【问题讨论】:

    标签: c++ qt5


    【解决方案1】:

    在阅读Dynamic-Link Library Search Order 时,我发现可以使用SetDllDirectoryA() 修改搜索顺序,如here 所述。终于成功了。

    SetDllDirectoryA((LPCSTR) "path/to/plugin/folder");
    

    Windows 现在将搜索指定插件目录中的所有插件依赖项,否则永远不会搜索。

    也可以在here找到更多关于这个问题的信息

    【讨论】:

      猜你喜欢
      • 2022-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-29
      • 2017-10-17
      相关资源
      最近更新 更多