说明
使用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
- 将该脚本命名为look.sh,放在程序目录下
- 启动开始菜单的
MSYS2 MINGW64
(根据你的架构选择),并切换当前目录(cd)到程序目录 chmod +x ./look.sh
./look.sh
运行完脚本之后动态库的问题就解决了😉