Qt应用程序“xxx.exe 已停止工作 故障模块msvcr120.dll”

Qt应用程序“xxx.exe 已停止工作 故障模块msvcr120.dll”

一、问题描述

相信许多程序员都遇到过这种问题,好不容易写好程序,准备打包啦。在自己电脑上运行时,一切都很正常,放到其他电脑上死活运行不起来、要么出现很多问题,最糟糕的是直接崩溃!最近就遇到了一个让我崩溃的问题,在其他电脑上运行时一直出现“xxx.exe 已停止工作 故障模块msvcr120.dll”,使用各种修复工具修复dll,使用depenency walk找各种依赖库都没有解决该问题。错误截图如下:

这里写图片描述

二、解决办法:

1、在尝试了各种办法之后没有效果,就把工程直接一直到另外一台电脑上编译好可执行程序再运行,打包后竟然可以运行啦。但是在把这个程序移植回来,还是会出现上述错误,于是我就对比到底哪里出了错。最后发现是路径的问题。因为程序中有些地方使用的是相对路径,打包后程序路径发生变化啦,所以才导致的上述错误。问题是发现啦,下面就是解决啦。

2、首先想到的是通过找到可执行程序的路径再去找文件的相对路径的方法,于是我想到了Qt中的函数QApplication::applicationDirPath()获取可执行程序的路径+文件名称,再转化成const char类型(因为我需要传这种类型),结果还是出现上面的错误。于是各种qDebug(),路径都没有问题,打包之后就是不行。最后抱着试试的态度,调用微软的API接口GetModuleFileName()函数,获取路径再转化成const char竟然解决问题了。

三、遗留的问题:

为什么使用QApplication::applicationDirPath()获取可执行文件路径再转化成const char*方法不行而GetModuleFileName()函数可以?有知道的请指教,谢谢!

### VS中无法定位程序输入点的错误解决方案 #### 动态链接库缺失或版本不匹配 当遇到“无法定位程序输入点于动态链接库XXX.dll上”的错误时,这通常意味着应用程序试图调用一个不存在或不可访问的函数。对于VS 2019中的C++项目而言,如果是在处理点云过程中遇到了这个问题,则可能是由于使用的第三方库(如PCL Point Cloud Library)依赖的一些DLL文件未能正确加载所致[^1]。 为了修复这类问题,应确认所有必要的DLL已经被放置到了可执行文件所在的目录里,并且这些DLL来自与当前开发环境相兼容的版本。例如,在使用Qt框架的情况下,应当把相应的`$(QTDIR)\bin`下的DLL复制到`.exe`同级位置并设置好环境变量以便让系统能够找到它们[^2]。 另外一种常见的情形是因为缺少特定版本的Microsoft Visual C++ Redistributable包而引发此类异常。比如,“无法定位程序输入点 fesetround 于动态链接库 MSVCR120.dll 上”,这就暗示着可能需要安装Visual Studio 2013对应的Redistributable组件来提供所需的运行支持[^3]。 #### 编译选项配置不当 有时即使所有的外部依赖都已就绪,仍然会碰到类似的报错现象。此时应该检查项目的编译参数设定是否有误。特别是涉及到跨平台或多版本共存场景下容易出现问题的地方——即是否启用了某些仅适用于较新标准的语言特性却选择了旧版工具集进行构建。针对这种情况的一个典型例子就是关闭了C++11及以上特性的启用开关(`/permissive-`)之后再尝试访问那些默认开启此模式才能识别的对象成员变量(m_Size, m_Spacing),从而触发找不到标识符之类的警告信息。因此适当调整IDE内关于语言级别的合规性选项往往也能起到立竿见影的效果。 ```cpp // 修改项目属性 -> C/C++ -> 语言 -> 符合模式 设置为 "否" ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值