ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2020-03-14 21:01:11  阅读:558  来源: 互联网

标签:插件 0xc000007b Qt 程序 dll 编译 64 com


问题:

用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

标签:插件,0xc000007b,Qt,程序,dll,编译,64,com
来源: https://blog.csdn.net/guanguanboy/article/details/104866903

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有