VS+QT插件编译出来的程序发布release版本运行时提示程序无法正常启动0xc000007b

问题:

用VS2015+QT插件,使用\Qt\Qt5.10.1\5.10.1\msvc2015_64编译出的x64-Release版本,使用windeployqt 发布后,

执行可执行文件时提示:程序无法正常启动0xc000007b。

比较奇怪的是release版本使用windeployqt发布时,会将debug版本的dll也拷贝到exe所在的目录。

 

而编译出的x64-Debug版本使用windeployqt发布后,没有上面提到的两个问题。

 

用VS2017+QT插件,使用\Qt\Qt5.10.1\5.10.1\msvc2017_64编译出的x64-Release版本,使用windeployqt 发布后,

也会提示:程序无法正常启动0xc000007b。

 

原因分析:该问题的原因总体来说是dll不匹配。

经过在网上查找,发现两种解决问题的方法。

1,使用绝对路径下的windeployqt进行发布

https://www.zhihu.com/question/278433882

没有尝试这种方法。

2,直接从编译器的bin目录下copy需要的dll动态库

https://blog.csdn.net/u012613604/article/details/53572995

根据这种方法:我从\Qt\Qt5.10.1\5.10.1\msvc2015_64\bin目录下copy如下dll到Release exe的目录下,可以正常运行了。

从\Qt\Qt5.10.1\5.10.1\msvc2017_64\bin目录下copy如下dll到vs2017编译出的Release exe的目录下,也可以正常运行了。

 

另外:有一个博客和本帖提到的问题比较吻合:

https://www.cnblogs.com/csuftzzk/p/windows_launch_error_0xc000007b.html

作者:24K纯开源
Email: zhangzhongke007@163.com
出处:http://www.cnblogs.com/csuftzzk/
本文版权归24K纯开源和博客园共同拥有,欢迎转载,但未经作者同意必须保留此声明,且在文章明显位置给出原文链接,否则保留追究法律责任的权利。

 

一、背景介绍

      不久前用Qt开发了一款小工具在公司使用,Debug运行时一切正常。可是当Release编译发布打包之后,运行时弹出这样的提示框:

      略一思考,首先排除了DLL缺失的可能性。我知道Qt应用程序在发布的时候,需要将相关DLL都拷贝到同一个目录下,还得把平台插件文件夹也加进来。因此,整个发布后的程序组织结构如下:

      因此排除了DLL缺失的问题。那么可能是什么原因呢?在Google中搜索错误代码0xc000007b,不少帖子提示是库的版本不一致。有可能是因为在64位程序中引用了32位的库,或者在32位的程序中引入了64位的库导致出错的。怎么确定呢?使用Dependency Walker即可查看:

      可以看到,我的程序是64位版本的,但是确实引用了两个32位的库。那么,知道了原因了就好办了。

二、解决方案

 (1)方案一:方法比较简单,将32位的库都替换成64位的库。这个通过设置VS的链接器选项就可以完成。一般是因为粗心而导致链接到了版本不一致的库,但是在Debug和编译时都不报错,略感无语。

 (2)方案二:对于第一种方案不适用的情况,必须采用第二种方案了。本人在第二种情况中纠缠了多时。经过反复确认,工程类型设置成了X64类型,库也替换成了x64的,但是编译出来的程序中总会链接到32位的库。这样,不管我怎么编译修改,仍然还是弹出0xc000007b错误提示框。解决方法是:修改工程的manifest文件。

      像这样:把processorArchitecture都修改成amd64,重新编译程序后链接的就是64位的库了。仅仅只要修改这两个地方,如果改动其他地方,可能导致程序出错:

三、参考链接

1. http://blog.csdn.net/vbcom/article/details/7245186

2. https://msoos.wordpress.com/2010/09/11/0xc000007b-error-solution/

3. http://stackoverflow.com/questions/10492037/the-application-was-unable-to-start-correctly-0xc000007b

4. https://social.msdn.microsoft.com/Forums/en-US/c0bc5e8e-1b17-40e2-9476-c1900b5b04ea/comctl32dll-64-bit-version?forum=netfx64bit

5. http://stackoverflow.com/questions/24148196/incorrect-comctl32-dll-is-loaded-after-porting-a-project-from-win32-to-x64-platf

 

根据上面提到的方法,我使用Dependency Walker分析之后发现,确实是opencv_core2410.dll这个程序cpu类型是x86的。

将opencv_core2410.dll替换为x64的之后,问题解决。

<think>好的,我现在需要解决用户提到的Qt应用程序启动错误0xc000007b的问题。根据用户提供的引用资料,这个问题通常是由于缺少DLL文件或者环境配置不正确导致的。首先,我应该整理这些引用中的解决方案,然后有条理地呈现给用户。 首先,用户提到引用[2]指出错误代码0xc000007b通常是因为缺少运行环境的DLL文件,尤其是32位和64位不兼容的情况。这可能是一个关键点,需要检查应用程序和DLL的位数是否一致。比如,如果应用程序是64位的,但引用了32位的DLL,就会出错。 接下来,引用[5]提到了将Qt的相关路径添加到系统环境变量中,这可能涉及到确保系统能够找到必要的Qt DLL文件。比如,将Qt的bin目录添加到PATH变量中,或者在发布将这些DLL复制到exe所在的目录。 引用[1]和[3]中的情况是QtCreator直接运行没问题,但单独运行exe报错,这说明编译环境变量可能正确,但发布缺少DLL。解决方案可能包括使用windeployqt工具来自动收集依赖的DLL,或者手动复制所需的DLL文件。 另外,引用[4]虽然主要针对Python应用程序,但提到的问题类似,可能通用的解决方法包括安装VC++运行库,或者检查系统更新。这可能也适用于Qt应用,因为Qt可能依赖这些运行库。 总结可能的解决步骤: 1. 检查应用程序的位数(32位或64位),确保所有依赖的DLL文件位数一致。 2. 使用windeployqt工具自动部署所需的DLL。 3. 手动复制缺失的DLL到exe目录。 4. 安装必要的运行库,如Visual C++ Redistributable。 5. 检查系统环境变量,确保路径正确。 6. 使用DLL依赖检查工具(如Dependency Walker)来识别缺失或冲突的DLL。 需要注意的是,不同的Qt版本编译器可能需要不同的处理方式。例如,使用MSVC编译Qt程序可能需要对应的VC++运行库,而MinGW版本可能需要不同的DLL。此外,用户可能在发布没有包含平台插件目录(如platforms/qwindows.dll),这也可能导致启动问题。 还需要考虑其他可能性,比如DirectX组件缺失或损坏,尤其是在涉及图形渲染的应用中。但根据引用资料,主要的解决方案集中在DLL和运行库上,所以应优先处理这些方面。 最后,应该建议用户按照步骤逐一排查,先使用工具自动处理,再手动检查,确保所有依赖项都正确部署。</think>要解决Qt应用程序启动出现的错误0xc000007b,可按照以下步骤排查和修复: --- ### **1. 检查程序位数一致性** Qt应用程序的位数(32位/64位)必须与所有依赖的DLL文件一致[^2]。例如: - 若程序是**64位**编译的,确保引用的DLL(如`Qt5Core.dll`)均为64位版本。 - 检查编译器类型(MSVC或MinGW)是否与依赖库匹配。 --- ### **2. 使用`windeployqt`工具自动部署DLL** Qt提供`windeployqt`工具自动收集依赖文件: ```bash # 进入exe所在目录 cd /d [exe文件路径] # 执行部署命令(根据编译器选择) windeployqt --release [exe文件名].exe ``` 此命令会自动复制所需的Qt DLL、平台插件(如`platforms/qwindows.dll`)等到exe目录[^5]。 --- ### **3. 手动补充关键DLL** 若自动部署后仍报错,手动检查以下文件: - **Qt核心DLL**:`Qt5Core.dll`、`Qt5Gui.dll`、`Qt5Widgets.dll`等。 - **C++运行库**:如`msvcp140.dll`(需安装**Visual C++ Redistributable**)[^2]。 - **OpenGL组件**:`opengl32sw.dll`(部分Qt版本需要)。 --- ### **4. 安装运行环境依赖** - **安装Visual C++ Redistributable**:根据编译器选择对应版本(如VS2017需安装**VC_redist.x64.exe**)。 - **更新DirectX**:运行`dxwebsetup.exe`修复DirectX组件[^4]。 --- ### **5. 检查环境变量** 确保系统环境变量`PATH`包含: - Qt的bin目录(如`C:\Qt\5.15.2\msvc2019_64\bin`)。 - 必要将依赖DLL的路径临添加到`PATH`。 --- ### **6. 使用工具排查依赖** 通过`Dependency Walker`或`Process Explorer`扫描exe文件,识别缺失或冲突的DLL[^5]。 --- ### **总结流程图** $$ \begin{aligned} &\text{错误0xc000007b} \\ &\Rightarrow \text{检查程序/DLL位数一致性} \\ &\Rightarrow \text{使用windeployqt部署依赖} \\ &\Rightarrow \text{手动补充缺失DLL} \\ &\Rightarrow \text{安装VC++运行库/DirectX} \\ &\Rightarrow \text{验证环境变量} \end{aligned} $$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值