Qt5 编译 & 打包依赖dll发布

简介: 十年前学C++的时候,无聊到把windows 文件夹下几乎所有的*.dll 都看过一遍。偶尔在程序运行时看到缺少 *.dll 的提示,都会直接找出来解决。   随着“开发平台”和“编译器”版本的逐年升级,一个程序的依赖链接库体积也越来越大,这给码农、程序猿、软件攻城狮们测试和发布都造成了比较大的麻烦! 六年前做过某专业软件汉化包的安装程序打包,感觉专业的安装程序制作工具对一些小程序来说太浪费了,而且用户会觉得不够“绿色”。
十年前学C++的时候,无聊到把windows 文件夹下几乎所有的*.dll 都看过一遍。偶尔在程序运行时看到缺少 *.dll 的提示,都会直接找出来解决。

 

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

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

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

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

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

一、    软件环境安装与设置

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 5中GUI程序基本都需要此dll

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

 

2.ICU依赖库

(International Component for Unicode,Unicode工具)

 

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 给我打个招呼,得瑟一下!

目录
相关文章
|
15小时前
|
C语言 Windows
Qt 应用程序打包成安装文件
Qt 应用程序打包成安装文件
14 0
|
15小时前
|
编译器 C语言 Windows
cryptopp使用Qt mingw编译,以及海思平台交叉编译
cryptopp使用Qt mingw编译,以及海思平台交叉编译
33 0
|
15小时前
|
开发框架 Unix Linux
深度探索:Qt CMake工程编译后的自动打包策略
深度探索:Qt CMake工程编译后的自动打包策略
38 0
|
15小时前
|
Unix 编译器 开发者
Qt5.14.2 轻松掌握Qt中的压缩与解压缩:QuaZIP的神秘面纱与实战演练之windows环境编译
Qt5.14.2 轻松掌握Qt中的压缩与解压缩:QuaZIP的神秘面纱与实战演练之windows环境编译
139 0
|
15小时前
|
人工智能 编译器 C++
新版Qt6快速打包程序脚本
不知道啥时候Qt更新了,目前是6.7.0,项目默认的生成路径改了, 从 项目目录的同级目录 改为了 项目目录中的build目录, 之前的脚本也用不了了,所以用AI更新了一下脚本, 希望能帮到大家,方便快速打包程序到桌面。
41 9
|
15小时前
|
编译器
正点原子IMX6ULL-安装交叉编译器、编译tslib触摸屏库、编译arm环境qt源代码
正点原子IMX6ULL-安装交叉编译器、编译tslib触摸屏库、编译arm环境qt源代码
|
15小时前
Qt程序打包发布记录使用windeployqt工具
Qt程序打包发布记录使用windeployqt工具
|
15小时前
|
自然语言处理 编译器 程序员
【Qt底层之 元对象的编译】Qt 元对象系统及其编译流程解析
【Qt底层之 元对象的编译】Qt 元对象系统及其编译流程解析
109 4
|
15小时前
|
开发框架 前端开发 算法
【Qt App 编译 】Qt Cmake 资源文件的加载:如何使用 CMakeLists.txt 文件和资源文件
【Qt App 编译 】Qt Cmake 资源文件的加载:如何使用 CMakeLists.txt 文件和资源文件
45 0
|
15小时前
|
Linux 开发工具 C语言
【研究Qt webengine 模块编译】linux 交叉编译qt5.12的webengine模块成功的条件
【研究Qt webengine 模块编译】linux 交叉编译qt5.12的webengine模块成功的条件
141 1