Qt5程序在Windows 7/8上部署注意事项

和以往版本的QtSDK不同,Qt5.*对整个SDK结构进行了较大幅度的修改。以前4.*的代码移植到5.*版本上,需要更改的东西(包括QApplication、TextCodec等)也比较多。近日编译一个4.7.4的工程,略做微调顺利通过,然而在一台Windows 7测试机上运行时,总是报Runtime error,辗转几次之后这个发布问题终于解决。

首先要仔细看看官方的windows发布指南,qt5有着比较多的dll,下面就说一下qt5 dll依赖库,以及如何查询自己工程所用的dll及打包发布的方法。

QT 5的依赖链接库变得更多了,以下是QT 5程序所依赖的库:
1. 依赖库一览

1.1 QT模块库

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. Qt5Core.dll       
  2.  #QT核心库  
  3.   
  4. Qt5Gui.dll        
  5.  #QT Gui库  
  6.   
  7. Qt5Widgets.dll    
  8.  #QT Widgets库,QT 5中GUI程序基本都需要此dll  
  9.   
  10. #还有其他程序用到的Qt5XXX.dll  

1.2 ICU(International Component for Unicode,Unicode工具)依赖库

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. icudt49.dll       
  2. icuin49.dll      
  3. icuuc49.dll   
1.3 QT插件库,Qt新增,注意路径必须正确

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. #  
  2.  根据不同的程序,需要不同的插件库  
  3.   
  4. #例如  
  5.  QT_DIR/plugins/*/*.dll  
  6.   
  7. #  
  8.  需要将 platforms/*.dll,accessible/*.dll的文件结构保留  
  9.   
  10. #  
  11.  放在你所编译的程序所在目录  
  12. plugins/platforms/qwindows.dll  
  13. plugins/accessible/qtaccessiblewidgets.dll  

1.4 EGL依赖库,为OpenGL,OpenGL es提供接口


[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. libEGL.dll  
  2. libGLESv2.dll  

1.5 mingw依赖库(msvc编译则无需这些库)

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. libgcc_s_sjlj-1.dll  
  2. libstdc++-6.dll  
  3. libwinpthread-1.dll  

1.6 VC运行库(mingw编译则无需这些库)

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. msvcr110.dll(对应VS2012)  
  2. msvcp110.dll  

2 文件结构

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. --platforms  
  2.        --qwindows.dll  
  3.        --*.dll  
  4. --accessible  
  5.        --qtaccessiblewidgets.dll  
  6.        --*.dll  
  7. --(other plugin folder)  
  8.        --*.dll  
  9. --yourApp.exe  
  10. --Qt5Core.dll  
  11. --Qt5Gui.dll       
  12. --Qt5Widgets.dll  
  13. --icudt49.dll       
  14. --icuin49.dll      
  15. --icuuc49.dll  
  16. --libEGL.dll  
  17. --libGLESv2.dll  
  18. --libgcc_s_sjlj-1.dll(mingw)  
  19. --libstdc++-6.dll(mingw)  
  20. --libwinpthread-1.dll(mingw)  
  21. --msvcr110.dll(msvc)  
  22. --msvcp110.dll(msvc)  

3 结论

QT 5虽然有了ICU,Open GL的支持,还有c++11的支持,但是由于依赖的DLL实在是太多,着实有点不太方便。一个mingw编译的qt gui程序,光是依赖dll就有30-50M的依赖库,确实很不爽啊。不过7z压缩后有10M左右,还可以接受

附:简化qt程序发布的动态库聚合法

Qt静态编译链接生成的exe文件,不需依赖七大姑八大姨的一堆dll,可以独立运行,发布很方便。但绝大多数用的都是Qt开源版本,如果用静态链接,会有些限制。那有没有办法即能享受静态编译的方便,又不受开源许可的限制呢?方法之一,就是用动态编译,然后把exe和需要的dll整合成一个文件,问题就解决了。
具体步骤:
1、先动态编译链接,生成exe文件
2、找到依赖的dll文件

       这里,我们可以用Process Explore来获取所依赖的dll文件
      下载:
       http://pan.baidu.com/share/link?shareid=419262&uk=2701984065
       打开procexp.exe,通过菜单View==》Lower Pane View==》DLLs  勾选,显示dll窗口


        这里,我们以test.exe为例,
        在Qt环境下,将exe运行起来,在ProcessExplor中,找到就可以找到test.exe,选中,在下面就看到依赖的dll了。


       系统目录下的,一般不用关心,按Path排序,看Qt目录及mingw目录下的,将这些dll拷贝出来,单独放到一个目录下。
3、打包
       打包工具,这里选用Enigma Virtual Box,
       下载:
        http://pan.baidu.com/share/link?shareid=419263&uk=2701984065
       安装,运行


       Enter Input File Name中,选择exe
       Enter Output File Name,输出文件名称
       点Add按钮,将前面准备好的dll文件,添加进来
       点Files Options,勾选Enable Files Virtualization和Compress files,OK
       最后,点Process,大告成。


http://blog.youkuaiyun.com/derryzhang/article/details/17002193
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值