加载中…
个人资料
PhanTask
PhanTask
  • 博客等级:
  • 博客积分:0
  • 博客访问:27,148
  • 关注人气:3
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

QT编译发布程序后报错如缺少dll、“应用程序无法正常启动(0xc000007b)”的可能解决方法

(2015-01-30 22:57:38)
标签:

qt

编译

发布

dll

0xc000007b

分类: Qt

最近项目要用qt,因为初学没有经验,遇到些小问题常常没什么头绪,也查不到解决方法,刚刚还因为低端错误耽误了群里一位朋友的时间QT编译发布程序后报错如缺少dll、“应用程序无法正常启动(0xc000007b)”的可能解决方法。决定以后如果遇到类似小问题就记录下来,也方便初学者少走弯路了。

 

首先,qt动态编译发布程序一般是在Qtcreater中编译出release版本并运行后,在生成的release版本文件夹中取出exe。单独运行exe时会报错缺少dll,出现这个问题直接在qt库的文件夹中搜索提示的dll,放入exe所在的文件夹即可。

 

我遇到的(0xc000007b)问题也出在这个阶段,也是太粗心了。

报错(0xc000007b)的可能解决方法:

① 许多dll应当取自Qt5.4.0\5.4\msvc2013_64\bin目录下,而在Qt5.4.0\Tools\QtCreator\bin中也有许多同名的dll,直接搜索文件时Qt5.4.0\Tools\QtCreator\bin中的dll往往先蹦出来,如果将这些dll放到exe文件夹中,就会报错“应用程序无法正常启动(0xc000007b)”。碰到这种情况真是无解了,完全没有线索……所以如果出现这个问题,先确认下所拷贝dll的来源是否正确,qt程序对dll的要求是比较高的。

推荐使用一款软件Process Explorer来查询exe所依赖的dll有哪些以及具体地址在哪里,防止犯错。

在软件中进行如下设置:

QT编译发布程序后报错如缺少dll、“应用程序无法正常启动(0xc000007b)”的可能解决方法

之后打开Qtcreater,编译程序并运行,在Process Explorer中会出现exe的进程,鼠标选中后可在下方查看其所依赖的dll及其位置。一般在系统盘中的dll可以不管,主要看PATH位于Qt文件夹中的dll,那些有很多往往就是exe所需要的dll。

② qt5发布程序对于dll的放置也有一些要求和变化,在网上见到有人出现0xc000007b问题是因为qwindows.dll未放入。这里转发 derryzhang 的博文http://blog.csdn.net/derryzhang/article/details/17002193,讲解得非常详细。

由此,最后dll放置结构应是如此:

  1. --platforms  
  2.        --qwindows.dll  
  3.        --*.dll  
  4. --accessible                    //Qt5.4中无此文件夹,故可忽略
  5.        --qtaccessiblewidgets.dll//Qt5.4中无此文件,故可忽略  
  6.        --*.dll  
  7. --plugins
  8.        --folders 
  9.               --*.dll  
  10. --yourApp.exe  
  11. --Qt5Core.dll        //Qt5版本
  12. --Qt5Gui.dll       
  13. --Qt5Widgets.dll  
  14. --icudt49.dll       //Qt5.4中为icudt53.dll,下同
  15. --icuin49.dll      
  16. --icuuc49.dll  
  17. --libEGL.dll       //此两个dll如未用到openGL应该也可不放
  18. --libGLESv2.dll  
  19. --libgcc_s_sjlj-1.dll(mingw)//编译器为mingw时才需要的三个文件  
  20. --libstdc++-6.dll(mingw)  
  21. --libwinpthread-1.dll(mingw)  
  22. --msvcr110.dll(msvc)//编译器为msvc时才需要的两个文件,对应所用vs的版本号
  23. --msvcp110.dll(msvc) 

 截张我的(gdal111.dll为第三方的,可忽略):

QT编译发布程序后报错如缺少dll、“应用程序无法正常启动(0xc000007b)”的可能解决方法

③ 在某些论坛有人称是程序中存在指针越界的情况(编译可以运行怎么会出现这个情况,不解……),如果以上方法都不能解决问题,可尝试以此为思路。


在发布程序时如果遇到其他问题可参考 江湖么名 的这篇博文:http://www.cnblogs.com/mmix2009/p/3536825.html 

对其他问题也有很详细的归纳。

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有