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可以很轻易就打造出漂亮的界面,实在是让我爱不释手。不论是打造一些实用小程序,或是开发上位机,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
QT 4.8 静态库编译方法的更多相关文章
- [转]QT 4.8 静态库编译方法
最最初踏上QT之路是受到了XiaomaGee的指点,相比于常规的窗口程序开发,QT有着以下特点: 1. 优良的跨平台特性(支持Win.Linux.Mac 不同的平台下只需重新编译即可使用) 2. 面向 ...
- golang 编译或链接 c语言动态、静态库的方法, golang 与 c语言 相互调用
1.golang链接c静态库的方法可以见这个示例: https://github.com/atercattus/go-static-link-example https://github.com/sh ...
- Xcode6.1标准Framework静态库制作方法。工程转Framework,静态库加xib和图片。完美解决方案。
http://www.cocoachina.com/bbs/read.php?tid-282490.html Xcode6.1标准Framework静态库制作方法.工程转Framework,静态库加x ...
- Compaq Visual Fortran生成静态库的方法及使用
Compaq Visual Fortran 6.5生成lib静态库详细方法: 打开Compaq Visual Fortran,新建Fortran Static Library工程,命名为ForLib: ...
- iOS之 PJSIP静态库编译(三)
dada哪个所有静态库编译完成后还是不能运行那个demo,提示你找不到arm**.a 你lipo后要记得吧合并成.a 名字更改成你最后编译版本生成的.a名字....... 或者吧所有库add到你的工 ...
- iOS之 PJSIP静态库编译(一)
首先放上pjsip官方网站http://www.pjsip.org/download.htm 下载的时候注意while the .bz2 has LF line-ends and is for Uni ...
- SQLite3动态库、静态库编译
资源准备 1.下载SQLite3源码,下载地址为https://www.sqlite.org/download.html.下载sqlite-amalgamation-3200000.zip和sqlit ...
- Aravis 库编译方法
Aravis 库编译方法 March 21, 2015 9:40 PM 首先下载 aravis 库的源代码:aravis 库下载地址 这里我们使用的是 aravis_0_2_0,比较老的一个版本. 首 ...
- C++静态库编译
MFC 选项选择: 静态库编译 增加头文件:( opencv相关的) #pragma once #ifdef WIN32 #include <opencv2/core/version.hpp&g ...
随机推荐
- Linux内核结构体--kfifo 环状缓冲区
转载链接:http://blog.csdn.net/yusiguyuan/article/details/41985907 1.前言 最近项目中用到一个环形缓冲区(ring buffer),代码是由L ...
- 如何自定义oauthauthorizationserverprovider错误信息?
We are using the OAuthAuthorizationServerProvider class to do authorization in our ASP.NET Web Api a ...
- http 错误码对照表
代码 指示 2xx 成功 200 正常:请求已完成. 201 正常:紧接 POST 命令. 202 正常:已接受用于处理,但处理尚未完成. 203 正常:部分信息 — 返回的信息只是一部分. 204 ...
- C++知识整理(进制)
++输出二进制.十进制.八进制和十六进制总结 分类: C++ 2013-01-14 02:26 592人阅读 评论(0) 收藏 举报 在C++中,默认状态下,数据按十进制输入输出.如果要求按八进制或十 ...
- Python 装饰器学习心得
最近打算重新开始记录自己的学习过程,于是就捡起被自己废弃了一年多的博客.这篇学习笔记主要是记录近来看的有关Python装饰器的东西. 0. 什么是装饰器? 本质上来说,装饰器其实就是一个特殊功能的函数 ...
- 【C++】关于带const的指针问题
区分const出现在*前还是*后 前: 例如const int *p,这种表示情况下,p本身可以改变,即p可以指向不同的地址, 但是p指向的内容不可改变. 就像你喜欢看书,图书馆规定你可以任意借阅及更 ...
- 【LeetCode】50. Pow(x, n) (3 solutions)
Pow(x, n) Implement pow(x, n). 按照定义做的O(n)肯定是TLE的. 利用这个信息:x2n = (xn)2 有个注意点,当n为负是,直接取反是不可行的. 由于int的表示 ...
- 《JAVA与模式》之有感
陆陆续续看了gof,大话设计模式等books,对于设计模式仍然是徘徊于门外,随偶有感悟,然久必忘记,是实则悟性太低. 因此作此文,结合博客中一系列关于设计模式的博文,加深对设计模式的理解,同时备自己随 ...
- Axure多人协作
这几天搞<材料採购系统>需求.我们组须要分模块画模型图,可是假设每一个人各自画各自的,最后整合,这样就太麻烦了.小左说Axure能够实现多人协作,于是我就研究了一下.我们组已经在用了.以下 ...
- 哇塞!HTML5 实现的雨滴效果 CSS发抖
http://dreamsky.github.io/main/blog/rainy-day/ Rainy Day – 哇塞! HTML5 实现的雨滴效果 http://www.webhek.com/m ...