博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Qt5 编译 & 打包依赖dll发布
阅读量:2238 次
发布时间:2019-05-09

本文共 2503 字,大约阅读时间需要 8 分钟。

十年前学
C++
的时候,无聊到把
windows 
文件夹下几乎所有的
*.dll 
都看过一遍。偶尔在程序运行时看到缺少
 *.dll 
的提示,都会直接找出来解决。

 

随着“开发平台”和“编译器”版本的逐年升级,一个程序的依赖链接库体积也越来越大,这给码农、程序猿、软件攻城狮们测试和发布都造成了比较大的麻烦!

六年前做过某专业软件汉化包的安装程序打包,感觉专业的安装程序制作工具对一些小程序来说太浪费了,而且用户会觉得不够“绿色”。如果能够简单的完成打包,并满足基本要求,那是比较好的解决方案。

前段时间有不少人都问到我“用什么软件做上位机GUI比较好?”,最近看了两天Qt,就拿这个说事吧。

Qt,是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架。和Java的“一次编译,到处运行”所不同的是,Qt是源代码级的跨平台,具有“一次编写,到处编译”的特性。Google EarthSkypeOpera…… 很多软件都是基于Qt编写的。

目前最新版本是 5.1.1,由于前段时间玩linux 的编译上瘾了,也懒得去装 MS Virual Studio2010/2012,于是下载了qt-windows-opensource-5.1.1-mingw48_opengl-x86-offline.exe(集成mingw4.8opengl)。

一、    软件环境安装与设置

5.1.1 版本在windows平台的移植和集成进一步完善了,不需要像网上那些针对旧版本的教程中说的需要繁琐的设置。只需要像典型的windows安装程序一样鼠标点击即可完成安装(当然在安装中要注意的是:mingw 默认并未选中)。

这个是能够持续看上两天Qt的主要原因!!!

二、    项目设置与程序编译

这个看看教程就行了,只是5.1.1 的教程暂时还没有出现!

随便找了个经典的“Hello world!”来跑了一下,有惊无险的“构建成功”。

PS:和所有英文软件一样,项目路径里不要有中文、日文、韩文、火星文等等说英语的家伙不认识的符号!

PS:不要认为别人编译通过的程序就一定能编译成功,编译环境和软件升级中的更新都可能导致失败!

三、    程序发布

程序编译的时候默认是“debug”的,其实和“release”生成的exe 都差不多,只是依赖链接库的大小不一样。对于普通用户,其实对程序大小是不敏感的,更多的人会关心华丽的人机界面或者繁杂的功能。只有要求苛刻的嵌入式系统用户和有强迫症的码农、程序猿、软件攻城狮们会追求极限的压缩体积!

四、    程序打包

要求苛刻的嵌入式系统用户有时候宁愿舍弃新的功能,都会要求稳定可靠的应用,而版本升级有时候并没有软件开发商的广告说的那么美好。

eg:随便下了个“串口调试助手”来做Model

Qt4编译这个“串口调试助手”,生成的依赖链接库只有4个,文件大小都还能够接受;

换成Qt5 来编译,会发现一下多了很多东西出来!

 

即使是用压缩工具压缩打包以后( 
)的体积,仍然比未压缩的旧版本要大!

 

一个小工具(一个mingw编译的Qt gui程序),依赖的DLL实在是太多,着实有点不太方便。而在社区里更多人提到的都是“静态编译”,但是使用“静态编译”又会受到开源许可的一些限制。

现在该是我们的小伙伴“Enigma Virtual Box”表现的时候了!!!

五、    打包依赖链接库

EnigmaVirtual Box 最新版本是 6.80 Build 20131003,启动后如下图所示:

 

在“Enter Input File Name”一栏指定Qt编译生成的 *.exe 文件,同时在“EnterOutput File Name”一栏会自动生成打包后输出文件的路径和文件名称。(请无视中间的广告!)

点击左下方的“Add…”按钮,添加所有的依赖链接库文件;然后点击右下方的“FilesOptions”,在弹出的对话框里选中“Enable Files Virtualization”和“CompressFiles”两项;“OK”后返回点击“Process”并等待小伙伴干完该干的活。

 

小伙伴生成的*.exe 文件(18.247KB )的尺寸要小了很多,并且这是一个纯粹的“绿色软件”,直接复制就能在任何存储介质上运行了!有了这个,妈妈再也不用担心系统会突然弹个框框出来,提示缺少××.dll 文件了!

六、    Qt5 主要依赖链接库说明

1.QT模块库

1

2

3

4

Qt5Core.dll      #QT核心库

Qt5Gui.dll       #QT Gui

Qt5Widgets.dll   #QT Widgets库,QT 5GUI程序基本都需要此dll

#还有其他程序用到的Qt5XXX.dll

2.ICU依赖库

International Component for UnicodeUnicode工具)

1

2

3

icudt51.dll     

icuin51.dll    

icuuc51.dll   

3.QT插件库(新增库,路径必须正确)

1

2

3

4

5

6

根据不同的程序,需要不同的插件库

#例如 QT_DIR/plugins/*/*.dll

需要将 platforms/*.dll,accessible/*.dll的文件结构保留

放在你所编译的程序所在目录

plugins/platforms/qwindows.dll

plugins/accessible/qtaccessiblewidgets.dll

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

1

2

libEGL.dll

libGLESv2.dll

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

1

2

3

libgcc_s_dw2-1.dll

libstdc++-6.dll

libwinpthread-1.dll

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

1

2

msvcr110.dll(对应VS2012

msvcp110.dll

 

最后,让新的小伙伴 Qt5 给我打个招呼,得瑟一下!

转载地址:http://uvabb.baihongyu.com/

你可能感兴趣的文章
集成测试(一)—— 使用PHP页面请求Spring项目的Java接口数据
查看>>
使用Maven构建的简单的单模块SSM项目
查看>>
Intellij IDEA使用(十四)—— 在IDEA中创建包(package)的问题
查看>>
FastDFS集群架构配置搭建(转载)
查看>>
HTM+CSS实现立方体图片旋转展示效果
查看>>
FFmpeg 命令操作音视频
查看>>
问题:Opencv(3.1.0/3.4)找不到 /opencv2/gpu/gpu.hpp 问题
查看>>
目的:使用CUDA环境变量CUDA_VISIBLE_DEVICES来限定CUDA程序所能使用的GPU设备
查看>>
问题:Mysql中字段类型为text的值, java使用selectByExample查询为null
查看>>
程序员--学习之路--技巧
查看>>
解决问题之 MySQL慢查询日志设置
查看>>
contOS6 部署 lnmp、FTP、composer、ThinkPHP5、docker详细步骤
查看>>
TP5.1模板布局中遇到的坑,配置完不生效解决办法
查看>>
PHPstudy中遇到的坑No input file specified,以及传到linux环境下遇到的坑,模板文件不存在
查看>>
TP5.1事务操作和TP5事务回滚操作多表
查看>>
composer install或composer update 或 composer require phpoffice/phpexcel 失败解决办法
查看>>
TP5.1项目从windows的Apache服务迁移到linux的Nginx服务需要注意几点。
查看>>
win10安装软件 打开时报错 找不到 msvcp120.dll
查看>>
PHPunit+Xdebug代码覆盖率以及遇到的问题汇总
查看>>
PHPUnit安装及使用
查看>>