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的之后,问题解决。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值