说明

使用msys2 mingw64 Qt的windeployqt打包Windows应用的时候出现打包后动态库找不到的问题,此时将C:\msys64\mingw64\bin下对应的动态库拷贝到应用程序当前目录可以解决,但是仍然报启动失败

应用程序无法正常启动(0xc000007b)。请单击"确定"关闭应用程序。

解决办法

如果程序使用了qml,则需要到C:\msys64\mingw64\share\qt6\qml下将对应使用到的qml插件目录拷贝到当前应用程序的qml目录下。

还有一种情况则是Qt的其他动态库依赖了C:\msys64\mingw64\bin下面的动态库,可以使用脚本一键找出那些间接依赖的项目。

#!/bin/bash

# 遍历当前目录下的所有.dll文件
for file in $(find . -name "*.dll" -o -name "*.exe"); do
    # 使用ldd命令查看文件的依赖,然后使用grep命令过滤出包含/mingw64/bin/的路径并保存
    ldd_output=$(ldd $file | grep -o "/mingw64/bin/[^ ]*")

    # 遍历每一个元素
        while IFS= read -r line; do
            # 如果为空跳过
            if [ -z "$line" ]; then
                continue
            fi
            # 使用cp命令复制文件
            echo "copying $line"
            cp $line .
        done <<< "$ldd_output"
done
  1. 将该脚本命名为look.sh,放在程序目录下
  2. 启动开始菜单的MSYS2 MINGW64(根据你的架构选择),并切换当前目录(cd)到程序目录
  3. chmod +x ./look.sh
  4. ./look.sh

运行完脚本之后动态库的问题就解决了😉