【问题标题】:Qt application failed to start because not finding the plugin "windows" directoryQt 应用程序无法启动,因为没有找到插件“windows”目录
【发布时间】:2014-05-17 05:41:29
【问题描述】:

我知道关于 Qt 的这个问题有几个答案(比如这个Qt 5.1.1: Application failed to start because platform plugin "windows" is missing)。我用的是Qt 5,不过貌似其他版本也有这个问题。

接受的答案不是我的问题,但是按照链接将平台目录复制到可执行文件的解决方案工作正常。但是我发现这个解决方案很不令人满意,因为这意味着我必须在整个地方分发这个相同的目录。在项目中,我必须将它复制到我创建的每个项目的调试/发布分支​​中。运行designer.exe我也有这个问题,所以我也要复制到那里,以此类推。

将我的 QT 安装目录中的插件目录放入 PATH 并没有解决问题,尽管我不太明白为什么。显然有一些自定义代码加载所需的插件 DLL。

所以我想知道是否有一些可以接受的正确方法,比如设置一个 QT_HOME 变量或类似的,所以我不必到处复制 DLL。

【问题讨论】:

  • 你尝试过静态链接你的程序吗?
  • plugin/platform 目录中的 DLL 似乎不作为静态版本存在。
  • 您必须重新编译您的 Qt 以生成库的静态版本。啊,我不能(目前)生成 MySQL 连接器,尽管 Oracle 连接器工作正常。
  • 我自己使用开源包构建了 QT。据我了解,静态版本也应该默认构建,还是我必须重新配置?

标签: c++ qt qt5 qtcore qcoreapplication


【解决方案1】:

一般来说,自己构建 Qt 是个坏主意,在这种情况下,甚至没有必要进行静态构建。您有几种方法可以解决此问题:

来自文档:

All Qt programs automatically support the following command line options:
\list

    \li \c{-platform} \e {platformName[:options]}, specifies the
        \l{Qt Platform Abstraction} (QPA) plugin.

        Overridden by the \c QT_QPA_PLATFORM environment variable.
    \li \c{-platformpluginpath} \e path, specifies the path to platform
        plugins.

        Overridden by the \c QT_QPA_PLATFORM_PLUGIN_PATH environment
        variable.

和

void QCoreApplication::addLibraryPath(const QString & path) [static]

将路径添加到库路径列表的开头,确保首先搜索库。如果 path 为空或已经在路径列表中,则路径列表不会改变。

默认路径列表由一个条目组成,即插件的安装目录。插件的默认安装目录是 INSTALL/plugins,其中 INSTALL 是 Qt 的安装目录。

另请参见 removeLibraryPath()、libraryPaths() 和 setLibraryPaths()。

根据您的确切愿望,这可以通过一种或另一种方式解决。

【讨论】:

  • “一般来说,自己构建 Qt 是个坏主意”我强烈反对。这就是 Qt 的重点:您可以完全控制随应用程序发布的内容,并且可以根据需要对其进行配置。我不太清楚“不保证”具有静态构建的东西意味着什么。这是一个受支持的配置选项。对于部署,我已经一年多了除了静态构建之外没有使用任何东西,我看不出有什么问题。通过积极优化,它提供的二进制文件占用的虚拟内存更少,加载速度更快,运行速度更快。这是双赢的。
  • 在一般情况下自己构建 Qt 根本没有任何意义,因为存在二进制文件。此外,静态构建是一个错误的想法恕我直言,只是为了使用插件。它适用于官方版本。事实上,在嵌入式等设备上静态使用 Qt 也是不可接受的,您需要关注闪存大小,但话又说回来,这与使用插件不同。插件加载不保证静态构建。
  • @LaszloPapp,如果插件真的以共享方式使用,我同意,最好使用它们。我必须验证您的解决方案,看看这是否是问题所在。我将我的 QT 移动到另一个目录,它似乎记得安装前缀,所以这可能是它除了在本地路径中找不到插件的原因。我不同意“建立自己的坏主意”,因为这是 IMO 开源项目的重点。能够做到这一点。 ;)
【解决方案2】:

尝试使用 QCoreApplication::addLibraryPath(PATH TO PLUGIN FOLDER)。

【讨论】:

    猜你喜欢
    • 2018-04-28
    • 2014-04-11
    • 2020-04-13
    • 2013-12-28
    • 2015-06-06
    • 1970-01-01
    • 1970-01-01
    • 2016-06-10
    • 2014-10-01
    相关资源
    最近更新 更多