VS2022+QT6.7 解决windeployqt工具打包发布运行缺少.DLL组件的问题 无法定位程序入口问题

问题一:无法定位程序输入点

作者这里在另外一台没有安装支撑环境的电脑中运行程序报错,其中msvcp140d.dll组件为复现此错误从网上下载;

造成原因:使用windeployqt工具打包时, 没有链接到  Microsoft Visual C++ Redistributable  动态链接库所造成的;

解决办法:确保程序运行时的环境与编译时的环境一致;

Microsoft Visual C++ Redistributable的文件通常被放置在以下目录中:

x64(64位)库:C:\Windows\System\

x86(32位)库:C:\Windows\System32\

右上角搜索文件"msvcp140"

复制 msvcp140d.dll  msvcp140_1d.dll  msvcp140_2d.dll 组件粘贴到程序根目录中,在电脑没有安装支撑环境的情况下也可正常运行;

问题二:缺少XXX.dll组件

注意:除了msvcp140.dll msvcp140d.dll  msvcp140_1d.dll  msvcp140_2d.dll 组件需程序运行时的环境与编译时的环境一致,其他 .DLL组件 复制到程序根目录中即可运行;

通过百度网盘分享的文件:QT缺失DLL组件.zip
链接:https://pan.baidu.com/s/13HgTrCFNdIn3hvdopuAtmg?pwd=52hx
提取码:52hx

问题三:如何判断DLL组件是32位还是64位

用记事本打开DLL组件

64位:PE D       32位:PE L

### 关于 `windeployqt` 打包缺少 DLL解决方案 当使用 `windeployqt` 工具进行 QT 应用程序打包时,可能会遇到某些动态链接库(DLL)未被正确复制到目标目录的情况。以下是针对该问题的详细分析和解决方法: #### 1. **确认 Qt 版本与环境匹配** 如果将打包后的可执行文件部署到没有安装 Qt 的环境中仍无法正常运行,则可能是由于使用的 Qt 版本不兼容所致[^2]。因此,在开始打包之前,请确保开发机器上的 Qt 版本与目标系统的版本一致。 #### 2. **手动指定插件路径** 有时默认情况下 `windeployqt` 可能不会自动检测并复制所有的必需组件。可以通过以下方式来增强其功能: - 使用 `-dir` 参数自定义输出目录。 - 明确添加额外所需的模块或插件,例如通过参数 `--qmldir` 来处理 QML 文件及其依赖项。 示例命令如下所示: ```bash windeployqt --verbose 1 --qmldir path/to/qml/files output/exe/file.exe ``` 此处 `path/to/qml/files` 是指存储 QML 脚本的位置;而 `output/exe/file.exe` 则代表最终生成的应用程序入口点[^4]。 #### 3. **调整 Visual Studio 配置** 对于基于 Microsoft Visual Studio 构建的项目来说,可能还需要特别注意编译器配置方面的影响因素。比如切换至旧版插件支持工具链可以帮助改善一些特定场景下的行为表现[^3]。 具体操作步骤包括但不限于: - 卸载当前最新版的 *Qt Visual Studio Tools*; - 安装较早版本即所谓的 *Legacy Qt Visual Studio Tools*; - 更新项目的 C/C++ 和 Linker 属性设置以适应新的构建需求。 #### 4. **验证所有必要的依赖关系** 即使经过上述措施之后仍有遗漏情况发生的话,建议采用第三方工具如 Dependency Walker 或 Process Explorer 对 EXE 进行深入剖析,找出那些尚未满足的要求条件,并手工补充相应资源文件进去。 --- ### 提供一段 Python 脚本来辅助检查失的 dlls (可选) 下面给出了一段简单的 python 脚本用于扫描给定 exe 文件所依赖却不存在本地磁盘中的任何外部共享对象/动态连接库: ```python import os, sys from ctypes import CDLL def find_missing_dlls(exe_path): try: cdll.LoadLibrary(exe_path) print(f"All dependencies found for {exe_path}.") except OSError as e: error_message = str(e).split(' ')[-1].strip("'") if ".dll" in error_message.lower(): missing_dll = error_message.split(":")[0] print(f"The following DLL is missing: {missing_dll}") if __name__ == "__main__": if len(sys.argv) != 2: print("Usage: python check_dll.py <path_to_exe>") sys.exit(1) exe_file = sys.argv[1] if not os.path.isfile(exe_file): print(f"{exe_file} does not exist.") sys.exit(1) find_missing_dlls(exe_file) ``` 此脚本接受单个参数——待测试的目标 .exe 文件全名连同完整路径一起传入即可工作。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值