Java教程

qt介绍04——Qt5.5.0(32位)源码裁剪

本文主要是介绍qt介绍04——Qt5.5.0(32位)源码裁剪,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1. Qt源码下载

下载方式1:

https://download.qt.io/new_archive/qt/5.5/5.5.0/single/下载qt-everywhere-opensource-src-5.5.0.zip包即可

下载方式2:

Qt5.5.0安装时勾选源码下载(Qt5.5.0默认是不安装源码的) 如图所示 勾选Source Components即可

2. 编译工具安装

2.1 perl

下载ActivePerl-5.20.1.2000-MSWin32-x86-64int-298557.msi即可。

perl介绍(摘抄网上部分内容):

ActivePerl一个perl脚本解释器。其包含了包括有 Perl for Win32、Perl for ISAPI、PerlScript、Perl Package Manager四套开发工具程序,可以让用户编写出适用于unix,windows,linux系统的CGI程序来。我们安装的只是perl的一个解释程序,外观上也不会发生什么变化,你在windows的cmd界面里输入perl -v可查看你所安装的版本。在你编译perl程序时会用到它。若要编写perl程序需借助其它工具:notepad,eclipse.vim,eclim……用这些编写工具写好后存储成perl格式,就可用activeperl去编译!

CGI 是Web 服务器运行时外部程序的规范,按CGI 编写的程序可以扩展服务器功能。CGI 应用程序能与浏览器进行交互,还可通过数据库API 与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据。格式化为HTML文档后,发送给浏览器,也可以将从浏览器获得的数据放到数据库中。几乎所有服务器都支持CGI,可用任何语言编写CGI,包括流行的C、C ++、VB 和Delphi 等。CGI 分为标准CGI 和间接CGI两种。标准CGI 使用命令行参数或环境变量表示服务器的详细请求,服务器与浏览器通信采用标准输入输出方式。间接CGI 又称缓冲CGI,在CGI 程序和CGI 接口之间插入一个缓冲程序,缓冲程序与CGI 接口间用标准输入输出进行通信。

安装完成后查看perl版本如图所示:

2.2 python

下载安装python-2.7.9.msi即可。

安装完成后配置环境变量如下:

3. 编译选项配置

踩过的坑1:

我用的是vs2013+qt5.5.0(32位),粗心的我一开始拿着Qt5.5.1(64位)就开始编译裁剪起来。待Qt5.5.1裁剪成功后,才意识到Qt版本不对,醉了。。。不过好在两个版本差异不大,但有一点需要注意的。我们是通过命令行来编译的,Qt5.5.0(32位)的话我们可以以管理员的身份打开“VS2013 x86 本机工具命令提示”即可。如图所示:

问题来了,之前Qt5.5.1编译的好好地,但是换成Qt5.5.0后愣是编译不过了,我哭了。。。经排查,定位到原因是环境变量配置的问题(我电脑默认只配置x64  不配置x86)

环境变量第一种配置方法:

手动配置

环境变量第二种配置方法:

我们需要到C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools(这是我电脑的vs2013的安装路径)下执行一下vsvars32.bat这个脚本 命令行直接执行就可以了。这个批处理 主要就是在运行cmd的时候先为我们设置一下环境变量(临时的) (这个脚本中写入的是bin,lib,include,tools的路径信息)

4. 源码不裁剪编译

打开“VS2015 x64本机工具人员命令提示符”,进入cmd窗口模式

步骤1:进入Qt的源码目录(我是用的Qt安装时下载的源码 目录为C:\Qt\Qt5.5.0\5.5\Src)

步骤2:执行配置命令: configure -prefix -release -opensource -platform win32-msvc2013 -shared  -nomake examples -nomake tests -no-icu -no-openssl  -no-iconv -no-qml-debug -skip qtactiveqt -skip qtconnectivity -skip qtdeclarative -skip qtdoc -skip qtenginio -skip qtgraphicaleffects -skip qtimageformats -skip qtlocation -skip qtmultimedia -skip qtquick1 -skip qtquickcontrols -skip qtscript -skip qtsensors -skip qtserialport -skip qtsvg -skip qttools -skip qttranslations -skip qtwebchannel -skip qtwebengine -skip qtwebkit -skip qtwebkit-examples -skip qtwebsockets -skip qtxmlpatterns

命令参数简要介绍:

1)-prefix 生成目标库的目录

2)-release 生成release版本  -debug 生成debug版本  -debug-and-release生成debug和release版本

3)-opensource 编译开源版  -commercial 编译商业版 (参数可选)

4)-static 生成静态库lib文件  -shared 生成动态库dll文件 (参数可选,默认是shared)/*** 注:静态库与动态库区别是在生成目标文件的链接方式上,静态库采用静态链接,在生成的目标文件(如.exe文件)中会包含库文件代码,而动态库在程序编译时并不会被连接到目标代码中,而是在程序运行时才被载入。***/

5)-force-debug-info 强制生成调试信息 (参数可选)/*** 这个参数是让Qt release版本也生成.pdb文件。这个文件有什么作用呢?它就是我们在release版本下设置了异常捕获信息函数,打印出错堆栈信息所必须的文件。如果程序没用开启异常捕获选项,是不需要开启这个参数的。***/

6)-opengl dynamic 指定opengl库 (参数可选) /*** 关于这个参数说明请参考doc.qt.io/qt-5/windows-requirements.html ***/

7)OpenGL(全写Open Graphics Library)是指定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维图像(二维的亦可),是一个功能强大,调用方便的底层图形库。

OpenGL™ 是行业领域中最为广泛接纳的 2D/3D 图形 API,其自诞生至今已催生了各种计算机平台及设备上的数千优秀应用程序。OpenGL™ 是独立于视窗操作系统或其它操作系统的,亦是网络透明的。在包含CAD、内容创作、能源、娱乐、游戏开发、制造业、制药业及虚拟现实等行业领域中,OpenGL™ 帮助程序员实现在 PC、工作站、超级计算机等硬件设备上的高性能、极具冲击力的高视觉表现力图形处理软件的开发。

8) -platform win32-msvc 目标库运行平台

9) -skip 跳过该模块

10) -nomake 不编译该模块

11) -mp 启动多核编译

注:-skip和-nomake都可省略,但是-skip qtwebengine这个参数不能省略,qtwebengine模块有需要依赖的库,这里不跳过编译会失败。

步骤3:nmake (编译后的文件生成目录: C:\Qt\Qt5.5.0\5.5\Src\qtbase\lib)

关于nmake的一些介绍详见这边博客: https://blog.csdn.net/satiling/article/details/7492504

步骤4:nmake install

安装,可以安装也可以不安装,我们只要编译后的文件即可。

5. 源码裁剪编译

裁剪核心: 在configure时, 指定qconfig文件 

步骤:

1)Qt tools下有个工程qttools\src\qconfig,用Qt Creator打开首先配置生成路径,如图所示:

2)构建工程。

踩过的坑2:

构建失败,需要手动在feature.h中添加#include <QObject>头文件。

踩过的坑3:

构建完成后,运行失败。需要拷贝platforms文件夹和Qt三个库到应用程序同文件夹下。

3)运行

运行后如图所示:

4)选择不需要编译的模块取消勾选即可

注意:选中某一模块后右侧会显示依赖关系,我们在打算取消编译某一模块时,对应的依赖它的模块也要取消编译,否则编译不过。例如QToolButton依赖如图几个模块:

5)选择完毕后,点击file-save as.., 默认弹出如下路径,保存在该路径即可(不要另外选择目录保存),保存文件名可命名为qconfig-xxx.h,例如qconfig-myconfig.h

如图所示,qt已经为我们做好了一些裁剪qconfig-dist.h、qconfig-large.h等,我们只要根据自己需要裁剪自己的版本即可。当前目录下,有一个qfeatures.txt,里面包含所有模块之间的依赖关系,也可以供我们裁剪时参考。

6)保存完毕后,重新执行configure,在配置选项中只需增加-qconfig myconfig编译即可

configure -prefix -release -opensource -platform win32-msvc2013 -shared -qconfig myconfig -nomake examples -nomake tests -no-icu -no-openssl  -no-iconv -no-qml-debug -skip qtactiveqt -skip qtconnectivity -skip qtdeclarative -skip qtdoc -skip qtenginio -skip qtgraphicaleffects -skip qtimageformats -skip qtlocation -skip qtmultimedia -skip qtquick1 -skip qtquickcontrols -skip qtscript -skip qtsensors -skip qtserialport -skip qtsvg -skip qttools -skip qttranslations -skip qtwebchannel -skip qtwebengine -skip qtwebkit -skip qtwebkit-examples -skip qtwebsockets -skip qtxmlpatterns

7)nmake

编译完成后,即可拷贝裁剪后的文件只我们的客户端下运行

踩过的坑4:

我要用到了Qt的三个库Qt5Core.dll、Qt5Gui.dll和Qt5Widgets.dll,将这三个库拷贝到我们release文件夹下后,运行发现报这种错误

根据具体问题提示,排查到是qwindows.dll版本的问题,我们经过上述裁剪编译后,会重新生成一个qwindows.dll版本,路径为C:\Qt\Qt5.5.0\5.5\Src\qtbase\plugins\platforms,我们只需要把新编译生成的头文件拷贝到我们的目录下替换即可。

6. 裁剪前后的库的大小对比

裁剪前

裁剪后

Qt5.8以上有了新的裁剪方式:QtLite

详细介绍可参见这篇博客: https://blog.csdn.net/wsj18808050/article/details/55808104

这篇关于qt介绍04——Qt5.5.0(32位)源码裁剪的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!