QT 4.8 静态库编译方法

简介: 最最初踏上QT之路是受到了XiaomaGee的指点,相比于常规的窗口程序开发,QT有着以下特点: 1、 优良的跨平台特性(支持Win、Linux、Mac 不同的平台下只需重新编译即可使用) 2、 面向对象 3、 丰富的API 4、 支持2D/3D图形渲染,支持OpenGL 5、 大量的开发文档(无需像VC一样装几个G的MSDN) 6、 XML支持 其实,仅仅是第一点,就足以让我从VC转向QT。

最最初踏上QT之路是受到了XiaomaGee的指点,相比于常规的窗口程序开发,QT有着以下特点:

1、 优良的跨平台特性(支持Win、Linux、Mac 不同的平台下只需重新编译即可使用)

2、 面向对象

3、 丰富的API

4、 支持2D/3D图形渲染,支持OpenGL

5、 大量的开发文档(无需像VC一样装几个G的MSDN)

6、 XML支持

其实,仅仅是第一点,就足以让我从VC转向QT。并且在本人的学习过程中发现,QT可以很轻易就打造出漂亮的界面,实在是让我爱不释手。不论是打造一些实用小程序,或是开发上位机,QT都是很不错的选择!

之前用VC++的时候,只要是编译出来的exe,就可以放到大多数的电脑上运行,而QT不同,由于QT默认是动态编译,正常运行需要调用QT的标准库(即.dll),因此要想脱离IDE单独运行,必须满足:将关联的dll拷贝至.exe同目录(或system32文件夹内),或者在环境变量中添加QT标准库的路径。否则就会出现如下警告:

这就使得QT的通用性受到了局限,尤其是用QT开发上位机时,如果需要在某台电脑上观测数据,除了exe,还得拷贝一大堆dll过去,显得很麻烦,那么,有没有办法可以满足,仅需要一个exe文件,就可以在所有装有win系统下的电脑上运行呢?答案是肯定的!

这就需要将QT的标准库进行静态编译。

本人曾在网上查找了大量资料,经过各种尝试各种失败,最终完成了QT4.8最新版本的库编译。现将整个步骤,从软件安装开始,整理出来供大家参考与交流。

PS:这里选用的是Windows系统下的QT SDK作为开发环境,如果用VS编译,仅需在个别步骤稍作修改即可,本人不用VS很久,所以没有亲自测试。

步骤一:下载软件安装包

一共需要下面3个安装包

1、 QT下载

地址:http://qt.nokia.com/downloads

下载QT SDK及QT Library

选择离线安装包

选择MinGW版的QT标准库(VS版的对号入座)

QT4.8的标准库编译需要用到perl

下载地址http://www.activestate.com/activeperl/downloads

步骤二:安装软件

1、 安装QT SDK

目前QT已经被Nokia收购,因此安装包中会有很多手机程序的开发组件,如果不需要,按照下面给出的配置,去掉不需要的组件即可

首先在这一页选择“Custom”

API部分全部去掉

“Development Tools”中选择“QT Creator”(默认)和“Desktop QT”中的MinGW版

个人判断:这个库用于QT的动态编译,选择安装,即可在今后实现:调试时使用动态库,方便快捷;发布时使用静态库,便于使用。

这里我又选择了一遍MinGW,保险起见:)

2、 安装QT标准库

这里有一点要注意,安装前的最后一步需要选择MinGW的安装目录,在QTSDK文件夹下

选择mingw的文件夹即可

3、 安装Perl环境

一路狂点Next即可

步骤三:标准库的编译

1、 配置编译选项

1)打开X:\Qt\4.8.0\mkspecs\win32-g++\qmake.conf (X为QT安装盘符)

(建议先备份一下)

在QMAKE_LFLAGS后面加上 –static

并将QMAKE_LFLAGS_DLL后面的 –shared 改为 –static

保存并关闭

2)将X:\Qt\4.8.0\bin 下的syncqt与syncqt.bat 这两个文件删除或改名

否则在编译时会提示找不到perl环境,如下图所示

2、 开始编译

打开Qt 4.8.0 Command Prompt软件,输入

configure –static –release –no-exceptions

PS:这个配置仅编译release版本,如果需要同时需要静态版的Debug版本,需要把-release 改为 –debug-and-release

回车后会有版本选择和用户协议,先后按”o”(Open Source) “y”(Yes)

…………耐心等待一会…………

配置完成后会出现下面这个画面:

————在开始这个步骤前,请确保你有至少2个小时的空闲时间————

接着输入 mingw32-make sub-src

回车………该干啥干啥去吧…………直到你看到下面这个画面:

PS:编译过程中可以浏览网页,可以刷微博聊QQ,但不建议跑大型程序,否则会大幅降低编译速度!!

当你看到这个画面时,恭喜你,马上就成功了~

步骤四:配置QT Creator

打开QT Creator新建一个工程,在Project界面点击下图所示的Manage按钮

点击ADD

进入目录X:\Qt\4.8.0\qmake 选择qmake.exe 如下图

底下的Version Name可以自己起(我用的Qt 4.8.0 Static)

返回Project界面,添加刚才选择的编译器

选择好之后,记得确认选择的是QT4.8.0的Release版本(静态Debug版没有编译,所以选择该模式会出错)

编译一下,进入工程目录,直接双击程序,完美运行!

至此,QT静态编译完成。

由于QT直接编译出来的exe体积较大,为了节省空间,便于保存与传播,可以压缩一下,这里选用UPX

拷贝UPX.EXE至C:\Windows\System32目录下

在cmd中输入upx(+空格)(+文件路径+文件名)(+回车)

即可出现下图

压缩比例为39.93% 可见效果还是非常可观的

至此,QT的静态库编译全部完成。

为了保证教程的准确性,我在写教程前,已将QT完整删除并重新安装编译,每完成一步就写一步的教程。我的编译方法未必是最好的,但是按照我的方法,保证可以成功!

Enjoy :)

 

http://www.cnblogs.com/elect-fans/archive/2012/03/24/2415737.html

作者:Bonker
出处:http://www.cnblogs.com/Bonker
QQ:519841366
       
本页版权归作者和博客园所有,欢迎转载,但未经作者同意必须保留此段声明, 且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利
目录
相关文章
|
4月前
|
编译器 C语言 Windows
cryptopp使用Qt mingw编译,以及海思平台交叉编译
cryptopp使用Qt mingw编译,以及海思平台交叉编译
141 0
|
2月前
|
Linux iOS开发 开发者
Qt问题(二):无法定位程序输入点于动态链接库
动态链接库(Dynamic Link Library,简称DLL)是一种可执行文件格式,常见于Windows操作系统中,而在Linux和macOS等其他操作系统中,相似的概念通常被称为共享库(Shared Library)。动态链接库允许程序在运行时加载所需的代码和数据,而不是在编译时静态链接到应用程序中。这种方式带来了几个重要的优点:
252 3
|
2月前
|
Oracle 关系型数据库 Linux
讲解linux下的Qt如何编译oracle的驱动库libqsqloci.so
通过这一连串的步骤,可以专业且有效地在Linux下为Qt编译Oracle驱动库 `libqsqloci.so`,使得Qt应用能够通过OCI与Oracle数据库进行交互。这些步骤适用于具备一定Linux和Qt经验的开发者,并且能够为需要使用Qt开发数据库应用的专业人士提供指导。
85 1
讲解linux下的Qt如何编译oracle的驱动库libqsqloci.so
|
27天前
|
API 开发工具 C语言
C语言与图形界面:利用GTK+、Qt等库创建GUI应用。
C语言与图形界面:利用GTK+、Qt等库创建GUI应用。
51 0
|
3月前
|
存储 编解码 Ubuntu
【QT】linux下alsa库的移植和QT中音视频的处理&笔记
【QT】linux下alsa库的移植和QT中音视频的处理&笔记
|
3月前
Cmake构建Qt项目链接glog库
Cmake构建Qt项目链接glog库
|
4月前
|
编解码
qt中使用dll库的方法
qt中使用dll库的方法
66 2
|
4月前
|
存储
Qt更新组件出现(“要继续此操作,至少需要一个有效且已启用的储存库”)
Qt更新组件出现(“要继续此操作,至少需要一个有效且已启用的储存库”)
204 0
Qt更新组件出现(“要继续此操作,至少需要一个有效且已启用的储存库”)
|
4月前
|
存储
Qt编译出现cc1plus.exe: out of memory allocating 65536 bytes问题
Qt编译出现cc1plus.exe: out of memory allocating 65536 bytes问题
238 0
|
2月前
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
135 1
Qt(C++)开发一款图片防盗用水印制作小工具