10

我在 Windows 7 x64 下的 VS 2010 中静态构建了 Qt 5.0.1。配置参数是

configure -debug-and-release -opensource -confirm-license -platform win32-msvc2010 -nomake examples -nomake tests -no-webkit -static

我使用 jom 使用以下参数执行了构建:

jom -j 4

构建过程成功,我可以找到所有库并将我的应用程序与 Qt 静态链接。现在的问题是,当我尝试运行应用程序时,它给了我一个错误

Module: 5.0.1
File: kernel\qguiapplication.cpp
Line: 781
"Failed to load platform plugin "windows". Available platforms are:"

但在此错误下方,它不会显示任何平台。我在动态链接 Qt 时遇到了同样的错误。我通过将依赖 DLL(qt5core.dll、qt5gui.dll 等)放在我的 exe 的同一目录中来摆脱它。但这次我想不出办法。

在 Qt 的静态构建之后,plugins/platforms/ 文件夹中的 DLL 消失了,它们被 libs 所取代。我也尝试与 qwindows.lib 静态链接,但无济于事。

任何想法?问候。

4

5 回答 5

7

要检查在 Windows 上部署应用程序所需的 DLL,请使用依赖项 Walker ( http://www.dependencywalker.com/ )。

根据文档页面Qt for Windows - Deployment一些 DLL 需要在 Windows 平台上部署 Qt 应用程序:

  • qwindows.dll
  • icudtXX.dll
  • icuinXX.dll
  • icuucXX.dll
  • libGLESv2.dll
  • libEGL.dll

根据您用于编译应用程序的编译器,可能需要一些其他库:

  • MSVC 特定库:
    • msvcrXX.dll
    • msvcpXX.dll
  • MinGW 特定库
    • libgcc_s_dw2-1.DLL
    • libstdc++-6.dll

注意:在所有这些文件中,将 XX 替换为系统上当前版本的 DLL。

如果您没有静态构建 Qt(默认),您还需要 Qt5 DLL,具体取决于您在应用程序中使用的 Qt 模块。例子:

  • Qt5Core.dll
  • Qt5Test.dll
  • Qt5Network.dll
  • 等等

所有这些 DLL 都可以在 Qt 安装目录下的“bin”文件夹中找到。

编辑

最近,Qt 开发人员创建了一个名为 windeployqt.exe 的工具,它可以帮助您收集部署应用程序所需的所有库:

Usage: windeployqt [options] [file]
Qt Deploy Tool 5.3.0

The simplest way to use windeployqt is to add the bin directory of your Qt
installation (e.g. <QT_DIR\bin>) to the PATH variable and then run:
  windeployqt <path-to-app-binary>
If ICU, ANGLE, etc. are not in the bin directory, they need to be in the PATH
variable. If your application uses Qt Quick, run:
  windeployqt --qmldir <path-to-app-qml-files> <path-to-app-binary>

Options:
  -?, -h, --help            Displays this help.
  -v, --version             Displays version information.
  --dir <directory>         Use directory instead of binary directory.
  --libdir <path>           Copy libraries to path.
  --debug                   Assume debug binaries.
  --release                 Assume release binaries.
  --force                   Force updating files.
  --dry-run                 Simulation mode. Behave normally, but do not
                            copy/update any files.
  --no-plugins              Skip plugin deployment.
  --no-libraries            Skip library deployment.
  --qmldir <directory>      Scan for QML-imports starting from directory.
  --no-quick-import         Skip deployment of Qt Quick imports.
  --no-translations         Skip deployment of translations.
  --no-system-d3d-compiler  Skip deployment of the system D3D compiler.
  --compiler-runtime        Deploy compiler runtime (Desktop only).
  --no-compiler-runtime     Do not deploy compiler runtime (Desktop only).
  --webkit2                 Deployment of WebKit2 (web process).
  --no-webkit2              Skip deployment of WebKit2.
  --json                    Print to stdout in JSON format.
  --list <option>           Print only the names of the files copied.
                            Available options:
                             source:   absolute path of the source files
                             target:   absolute path of the target files
                             relative: paths of the target files, relative
                                       to the target directory
                             mapping:  outputs the source and the relative
                                       target, suitable for use within an
                                       Appx mapping file
  --verbose <level>         Verbose level.

Qt libraries can be added by passing their name (-xml) or removed by passing
the name prepended by --no- (--no-xml). Available libraries:
bluetooth clucene concurrent core declarative designercomponents designer gui
clucene qthelp multimedia multimediawidgets multimediaquick network nfc opengl
positioning printsupport qml quick quickparticles script scripttools sensors
serialport sql svg test widgets winextras xml xmlpatterns

Arguments:
  [file]                    Binary or directory containing the binary.
于 2013-05-03T14:20:44.677 回答
5

我刚刚遇到了同样的问题,所以这是我的解决方案:

首先当然是使用 -static 参数构建 QT。

将以下库添加到您的构建中:

Qt5PlatformSupport.lib
qwindows.lib
imm32.lib

将以下路径添加到您的库路径:

$(QTDIR)\plugins\platforms

在您的代码(最好是 main.cpp)中添加以下行:

Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin)

生成的构建不应依赖于任何与 qt 相关的 dll。

于 2014-11-06T10:32:23.460 回答
0

如果您使用的是 libGLESv2.dll,那么您也必须包含 libEGL.dll。请参阅 从 Visual Studio qwindows.dll 错误部署 Qt C++ 应用程序

于 2013-09-19T20:27:26.617 回答
0

这是一个Qt 平台插件问题。在 MacOS 上使用qt.conf为我解决了这个问题。是否静态链接 Qt 并不重要。

我试图静态链接到 libqcocoa.a(或 qwindows.lib)但没有成功。如果我成功了,我会告诉你的。

于 2013-10-01T15:10:51.217 回答
-1

只需执行以下步骤:

  1. 转到Qt安装目录中的bin文件夹
  2. 复制所有扩展名为.dll的文件
  3. 将它们粘贴到C:\Windows\System32(32 位)或C:\Windows\syswow64(64 位)。
  4. 多田!你永远不会再看到那个恼人的信息
于 2019-01-21T14:31:32.110 回答