【QT】VS下Release报错This application failed to start because no Qt platform plugin could be initialize.

VS2019,cmake程序;debug运行正常,release运行在QAppliacation处异常报错

"This application failed to start because no Qt platform plugin could be initialize.  Reinstalling the application may fix this problem. Available platform plugins are:direct2d(from C:\Qt\Qt5.12.9\5.12.9\mscv2017_64\plugins\platforms),minimal(from C:\Qt\Qt5.12.9\5.12.9\mscv2017_64\plugins\platforms),offscreen(from C:\Qt\Qt5.12.9\5.12.9\mscv2017_64\plugins\platforms),webgl(from C:\Qt\Qt5.12.9\5.12.9\mscv2017_64\plugins\platforms),windows(from C:\Qt\Qt5.12.9\5.12.9\mscv2017_64\plugins\platforms)."

【根因分析】

        依赖的程序、资源未加载或加载了不正确的文件。

        而debug和release不一样的原因,是cmake中的编译方式不一致导致的,可能在一些链接的时候导致的不一致。

(在使用VS和Qt混合编程时,混用Release和Debug版本可能会导致一些问题。一个常见的问题是版本不兼容。具体来说,当你的lib库项目使用Debug版本编译,而调用该库的项目使用Release版本编译时,可能会出现一些错误。)

(Debug和Release的本质区别在于它们的编译方式不同。其中一个明显的外在表现是Debug版本的静态链接库通常比Release版本的大很多。这意味着在混合编程时,由于版本不匹配,可能会导致链接错误或其他运行时错误。)

大致思路如下:

这个错误通常表明在 release 模式下,Qt 应用程序找不到正确的平台插件。这可能是由于一些路径设置或文件缺失导致的。以下是一些可能的解决方案:

1.检查 Qt 部署:


2.确保在发布版本中包含了 Qt 平台插件(例如,qwindows.dll)并且放置在可执行文件所在目录的 platforms 文件夹中。你可以手动将这些插件复制到发布目录,或者使用 Qt 的部署工具(windeployqt)来自动部署。


3.检查路径设置:


4.在 release 模式下,确保 Qt 相关的路径设置是正确的。在 Visual Studio 中,打开项目属性,然后检查 VC++ 目录和链接器设置,确保它们包含了正确的 Qt 头文件和库文件路径。


5.检查 Qt 版本匹配:


6.确保在构建时使用的 Qt 版本与运行时使用的版本匹配。不同版本的 Qt 可能具有不同的平台插件和库文件。


7.查看依赖项:


8.使用工具(例如 Dependency Walker)检查你的发布版本中是否有缺失的依赖项。确保所有需要的 Qt 相关的 DLL 文件都可以在发布版本的目录中找到。


9.使用静态链接库:


10.尝试将 Qt 库从动态链接库切换为静态链接库。这可以通过在项目属性中的“配置属性” > “C/C++” > “代码生成”中设置运行库类型来完成。


11.检查运行时库设置:


12.在项目属性中,检查“配置属性” > “C/C++” > “代码生成”,确保在 release 模式下使用了正确的运行时库设置。通常在 release 模式下,你可能希望选择“多线程(/MT)”或“多线程调试(/MTd)”。


13.重新生成项目:

在进行任何更改之后,确保重新生成你的项目。

【其余搜索的补充】

1、vs+qt Debug正常Release报错

【解决方案】

注意,如下的解决方案中,需要注意的是;有些使用之后,需要重启电脑;有些使用之后,需要全部重新生成代码

【方法1】查看电脑的环境变量,是否有QT相关的变量;若没有,则设置环境变量

高级系统设置---》环境变量---》系统变量中添加如下地址:

变量名:QT_QPA_PLATFORM_PLUGIN_PATH

变量值:C:\Qt\Qt5.12.9\5.12.9\msvc2017_64\plugins\platforms

重启电脑,查看是否有效(新的环境变量需要重启后才能被系统识别)

【方法2】windows系统(qdirect2d.dll、...)、Linux系统(qdirect2dd.dll、...)--会多一个 d

【方法3】将Qt目录下plugin文件夹中的platforms文件夹直接复制到项目.exe的运行目录下

【方法4】查看.exe软件运行时,调用的dll文件,发现问题所在。

这种一般使用于:调用了其他路径下的QT的qwindows.dll等 报错。

 查看.exe软件运行时,调用的dll文件的方法:

【方法1】使用process explorer软件查看

详细见https://blog.csdn.net/qq_41155814/article/details/116655478

【方法2】使用dumpbin /dependents(命令行,VS自带的)

dumpbin /dependents your_application.exe
//替换 your_application.exe 为你实际的可执行文件名称,并且在命令提示符中运行。

也可以使用如下命令,将.dll信息,写到文本文档中

dumpbin /dependents your_application.exe > output.txt
// 替换 your_application.exe 为你实际的可执行文件名称
// output.txt为写处的信息的文本文档

 使用命令之后,出现结果大致如下:

【弊端】无法查看到具体的.dll的依赖的路径

【提示】若出现,无法打开该exe,查看是否exe的名字拼写错误

【方法5】查看环境变量,在系统环境的Path中,是否有在qt相关的环境变量前的变量,也有依赖qt库;导致运行时链接错误

【方法6】将动态编译的方式,改为使用静态编译

如果你在构建 Qt 应用程序时使用了动态链接库(.dll),尝试改为使用静态链接库(.lib)。这样会将 Qt 平台插件嵌入到你的应用程序中,避免了在运行时缺少插件的问题。

【方法7】检查 Qt 版本

确保你在构建时使用的 Qt 版本与你在运行时使用的版本相匹配。不同版本的 Qt 可能会导致兼容性问题。

如果以上方法没有解决问题,你可能需要进一步检查你的项目配置,确保 release 模式下包含了正确的 Qt 相关设置和路径。同时,确保你没有在 release 版本中意外地删除了必要的文件或配置。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值