2

我有一个应用程序,可以显示很多不同文件格式的图像,如 svg、png 和 jpeg。我的应用程序在构建环境中运行时运行良好,但是当我将其部署到目标 PC 时,只会加载 svg 和 png 图像,而其他图像会得到 QML Image: Unsupported Image Format。

图像对象在表单上

Image {
    id: jpgimage
    source: images/jpgimage.jpg
}
Image {
    id: pngimage
    source: images/pngimage.png
}
Image {
    id: svgimage
    source: images/svgimage.svg
}

我正在使用以下命令部署我的应用程序:

windeployqt --dir <my target folder> --qmldir <path the my project qml folder> <path to my executable>.exe --compiler-runtime

这将加载我所需的大部分库,但我还必须手动复制一些丢失的 .dll 文件,这些文件不是 Qt 特定的。

我的目标文件夹现在有这些文件和文件夹:

my_app.log                    Qt5Widgets.dll*            libharfbuzz-0.dll*
Qt/                           Qt5WinExtras.dll*          libiconv-2.dll*
Qt5Core.dll*                  QtGraphicalEffects/        libicudt68.dll*
Qt5Gui.dll*                   QtMultimedia/              libicuin68.dll*
Qt5Multimedia.dll*            QtQml/                     libicuuc68.dll*
Qt5MultimediaQuick.dll*       QtQuick/                   libintl-8.dll*
Qt5Network.dll*               QtQuick.2/                 libpcre-1.dll*
Qt5Qml.dll*                   QtQuick3D/                 libpcre2-16-0.dll*
Qt5QmlModels.dll*             QtTest/                    libpng16-16.dll*
Qt5QmlWorkerScript.dll*       QtWinExtras/               libstdc++-6.dll*
Qt5Quick.dll*                 my_app.exe*                libwinpthread-1.dll*
Qt5Quick3D.dll*               audio/                     libzstd.dll*
Qt5Quick3DAssetImport.dll*    bearer/                    mediaservice/
Qt5Quick3DRender.dll*         iconengines/               platforminputcontexts/
Qt5Quick3DRuntimeRender.dll*  imageformats/              platforms/
Qt5Quick3DUtils.dll*          libbrotlicommon.dll*       playlistformats/
Qt5QuickControls2.dll*        libbrotlidec.dll*          qmltooling/
Qt5QuickShapes.dll*           libbz2-1.dll*              styles/
Qt5QuickTemplates2.dll*       libdouble-conversion.dll*  translations/
Qt5QuickTest.dll*             libfreetype-6.dll*         virtualkeyboard/
Qt5RemoteObjects.dll*         libgcc_s_seh-1.dll*        zlib1.dll*
Qt5Svg.dll*                   libglib-2.0-0.dll*
Qt5Test.dll*                  libgraphite2.dll*

我的 imageformats 文件夹包含

qgif.dll*   qico.dll*  qjpeg.dll*  qtga.dll*   qwbmp.dll*
qicns.dll*  qjp2.dll*  qsvg.dll*   qtiff.dll*  qwebp.dll*

这是在 Windows 10 PC 上运行的,也是在 Windows 10 上使用 mingw64 和通过 msys2 安装的 qt 库构建的,使用的 windeployqt 可执行文件也来自 mingw64。

目标 PC 是新安装的,没有设置环境变量,应用程序运行并显示 svg 和 png 图像,但不显示 jpg 图像。

在让已部署的应用程序正常工作之前,我进行了几次尝试,因此我很可能在此过程中遗漏了一些明显的东西。

*编辑:我还尝试添加打印库路径的调试输出:

qDebug() << "QCoreApplication::libraryPaths(): " << QCoreApplication::libraryPaths();

这打印了我的目标文件夹路径(上面包含我的应用程序和所有库的路径)。

4

1 回答 1

0

windeployq 不会移动所需的所有运行时库,并且我缺少两个 .dll 文件来删除所有 imageformats 库问题:

libdeflate.dll
libjpeg-8.dll

第一个用于 tiff,第二个用于 jpeg 和其他一些变体。

调用 windeployqt 后所有其他缺少的库都会引发运行时错误,除了这两个。Dependency Walker 也没有检测到这两个缺失。

于 2021-05-06T14:32:13.877 回答