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
标签:插件,0xc000007b,Qt,程序,dll,编译,64,com 来源: https://blog.csdn.net/guanguanboy/article/details/104866903