2

svg、png、jpeg などのさまざまなファイル形式の画像を多数表示するアプリケーションがあります。アプリケーションをビルド環境で実行すると正常に動作しますが、ターゲット PC に展開すると、svg および png 画像のみが読み込まれ、その他の画像は QML 画像: サポートされていない画像形式になります。

画像オブジェクトはフォーム上にあります

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

これにより、必要なライブラリのほとんどが読み込まれますが、Qt 固有ではないいくつかの不足している .dll ファイルも手動でコピーする必要があります。

ターゲット フォルダーには、次のファイルとフォルダーが含まれるようになりました。

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 で実行されており、これも mingw64 を使用して Windows 10 上に構築され、そこに msys2 経由で qt ライブラリがインストールされています。使用されている windeployqt 実行可能ファイルも mingw64 のものです。

ターゲット PC は新しくインストールされ、環境変数が設定されていません。アプリケーションが実行され、svg および png 画像が表示されますが、jpg 画像は表示されません。

デプロイされたアプリケーションが機能するようになるまでにいくつかの試行を行ったので、このプロセスで明らかな何かが欠けている可能性が非常に高いです。

*編集:ライブラリパスを出力するデバッグ出力も追加してみました:

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

これにより、ターゲット フォルダー パス (アプリケーションとすべてのライブラリを含む上記のパス) が出力されました。

4

1 に答える 1

0

windeployq は、必要なすべてのランタイム ライブラリを移動するわけではなく、すべての imageformats ライブラリの問題を解決するための 2 つの .dll ファイルがありませんでした:

libdeflate.dll
libjpeg-8.dll

1 つ目は tiff 用で、2 つ目は jpeg と他のいくつかの亜種用です。

windeployqt を呼び出した後に不足している他のすべてのライブラリは、これら 2 つを除いて実行時エラーを発生させました。Dependency Walker は、これら 2 つの欠落も検出しませんでした。

于 2021-05-06T14:32:13.877 に答える