亲测VS2010纯静态编译QT4.8.0,实现VS2010编译调试Qt程序,QtCreator静态发布程序(图文并茂,非常详细)
下载源代码,注意一定是源码压缩包如qt-everywhere-opensource-src-4.8.0.zip,不是Qt发布的已编译的不同版本的标准库如qt-win-opensource-4.8.0-vs2010.exe,这些版本都只是动态编译的,不是我们所需要的。只有用源码包才能做真正的纯静态编译,如果用Qt官网已编译的标准库.exe文件进行编译,有可能出现各种错误,而且编译后的文件巨大,我当时就在这里绕了很大的弯子,请童鞋们注意啦!!可能有些老鸟会笑话,但我本着最严肃的态度告诉菜鸟们,上网查资料看博客,一定要注意博文的文字细节,有时候差几个字就能让你费很大的劲,四处碰壁。
首先解压源码包到你想要保存编译的位置,注意文件目录一定不能包含中文和空格!
由于Qt4.8在VS环境下的一些问题,为了避免编译中途出现,我总结了3个地方需要修改。
(1) 删除源码包中bin目录下的syncqt和syncqt.dat文件,如你不放心可将其改名或剪切到别的位置。如不修改将发生 Perl not found in environment - cannot run syncqt 错误。
(2) 修改\mkspecs\win32-msvc2010下的qmake.conf文件,将其中的
QMAKE_CFLAGS=-nologo -Zm200 -Zc:wchar_t-改成QMAKE_CFLAGS=-nologo -Zm200 -Zc:wchar_t
注意末尾的”-“号区别。如不修改将来如有项目使用wchar_t,qt却编译成wchar_t-,编译会导致连接错误,提示找不到Qwstring;
QMAKE_CFLAGS_RELEASE,QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO,QMAKE_CFLAGS_DEBUG这3处后面的MD,MDd对应改成MT,MTD,以实现在没有VC库的电脑也能运行Qt程序。
(3) 修改src\3rdparty\webkit\Source\WebCore\platform下的DefaultLocalizationStrategy.cpp,定位到327行,将本行替换成return WEB_UI_STRING("Look Up \"<selection>\"", "Look Up context menu item with selected word").replace("<selection>", truncatedStringForLookupMenuItem(selectedString));(由于word自动排版问题,请各位直接将以上英文部分一次性全复制,其实它们是一行,不要分行复制)。
如不修改将出现编译Webkit 时会出现 U1077错误。
VS2010下纯静态编译,需要再VS2010的命令提示符下进行,我安装的是中文版visual studio2010,我的打开步骤如下(英文版自己对号入座):开始->Microsoft Visual Studio 2010->Visual Studio Tools->Visual Studio 命令提示(2010),打开的窗口如下:

上图是VS2010自动帮我配置好环境变量,已正常进入VS2010的VC目录。我当初碰到过一次自动配置环境变量错误,在截图的第二行出现一行英文,内容大概是无法确定VC环境以及VC的位置,当时查遍了各种资料以及尝试网上的各种办法,中文的外文的网站各种建议,都不可以,差点让我失去信心。当时一生气,重启电脑,出门走走又自己琢磨了好几种方法,回来刚想试一试,没想到重新打开命令提示符,居然又自动可以了,真是惊喜啊。。最后想了想,当时错误可能是先装了SDK,然后又胡乱根据网上的方法,手动修改了电脑的环境变量,然后就出现这个问题。。后来再重启电脑前,把之前手动添加的环境变量统统删了,重启后重开命令提示符就恢复了。希望对有和我相同问题的童鞋能有所帮助。
上一段是题外话,如果你的VS已经自动帮你配置好环境变量了,如上面截图所示,则输入命令进入到源码包的目录下。这里教一些命令行新手,老鸟请直接跳过,如你现在的目录在C盘下,而你的源码包在D盘,则输入”d:”,回车,进入到D盘。可以使用cd进入你所要进入的目录中,如cd Qt\4.8.0,就能进入到D:\Qt\4.8.0中,在各个目录下,可以使用dir命令查看当前目录下的所有文件,如同linux下的ls命令。我进入我的已解压的源码包目录下,我已重命名为4.8.0了。命令提示符截图如下:

接下来进行编译前的配置工作。执行配置,完整命令如下:
configure -debug-and-release -fast -static -platform win32-msvc2010 -no-qt3support -script -scripttools -qt-zlib -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg -qt-sql-sqlite -plugin-sql-sqlite -qt-style-windows -qt-style-windowsxp -qt-style-windowsvista -qt-style-plastique -qt-style-cleanlooks -qt-style-motif -qt-style-cde -nomake demos -nomake examples -nomake docs –mp
各个命令说明请参照我的另一篇博文:Qt configure 参数不完全说明http://www.cnblogs.com/elect-fans/archive/2012/03/28/2420647.html
推荐将debug和release版本都编译,那样VS2010编译调试Qt程序不会出现LINK错误,本人亲测,有些人说只要编译release就可以了,但我个人觉得多编译一个debug,就增加一点点空间,而且后面命令省掉了demos等文件的编译,我最终编译完成的文件也就3.6G,对于现在的电脑硬盘来说都是毛毛雨了。命令最后的-nomake demos -nomake examples -nomake docs,不变异demos,exampls,docs文件,这样既可以提高编译速度,也能减小编译后的体积。-mp适合多核用户提高编译速度,-fast也很重要,细节请看上面的博文。
执行配置,期间会询问是否采用open source(开源版本),还是商业版本,输入”o”选择开源版本;询问是否同意条款,输入”y”表示同意,开始执行配置过程,直到提示配置完成,可以下一步nmake,以开始执行编译。
输入nmake,执行编译,编译过程数个小时(具体看个人电脑配置),编译时最好关闭防火墙,360之类的,你可以做别的事情了,看看网页,电影之类的,但不要运行大型程序,不然会严重降低编译速度。

编译成功结束,如同上图所示,可以关闭命令提示符了。我之前在看网上的资料,执行nmake clean,nmake confclean,结果造成后面VS2010编译Qt程序以及QtSDK编译程序出现各种问题,如找不到config.h,qtmaind.lib等等。所以强烈建议,编译成功就到此结束,不要执行上述两个清理工作。之前还尝试在configure添加-prex 指定nmake install安装目录,后经实验,编译后,的确可以实现编译完成后能实现静态库链接,且在QtCreator编译出静态程序,但是在VS2010编译程序时,出现很多找不到PDB的警告,所以舍弃之。
更多链接请光临我的博客:http://www.cnblogs.com/elect-fans/
接下来安装VS插件,安装文件为qt-vs-addin-1.1.10.exe,以下是安装过程以及安装的选项。


安装完成后,打开VS2010,可以通过QT菜单进行QT编译库定位以及打开pro工程文件,也可以通过新建工程项目来创建QT工程。



打开QT工程后,稍稍等待左下角提示关联文件包含提示结束,出现“就绪”的提示后,即可像编译普通VC程序一样,点“编译”按键进行编译以及通过调试菜单进行调试。注意通过VS2010主要用于调试,要想发布最终的静态链接程序,最好通过QTSDK中的QTCreator来发布。
安装QtSDK,以下是安装过程以及安装选项:



安装完成后,打开QtCreator中,在菜单”工具”->”选项”->”构建和运行”->”Qt版本”,手动添加刚才静态编译的QT的qmake.exe工具。


配置完成,接下来就可以打开Qt工程,通过项目设置来发布静态链接的Qt程序咯!!
我经过4天N次尝试,亲自测试各种资料和方法,最终通过实践成功完成了VS2010静态编译配置QT,期间遇到种种问题,总算解决了,由于篇幅的原因就不一一陈述了,不过本文是我一步步整理出来的,不敢说最适合,但一定有效!请大家关注我的博客:http://www.cnblogs.com/elect-fans/,一起探讨学习。
http://www.cnblogs.com/elect-fans/archive/2012/03/29/2422816.html
亲测VS2010纯静态编译QT4.8.0,实现VS2010编译调试Qt程序,QtCreator静态发布程序(图文并茂,非常详细)的更多相关文章
- Linux环境下MySQL 5.6安装与配置----亲测有效----纯离线安装
一.安装MySQL 1.下载安装包 mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz 下载地址: https://dev.mysql.com/get/Downloa ...
- caffe 在window下编译(windows7, cuda8.0,matlab接口编译)
1. 环境:Windows7,Cuda8.0,显卡GTX1080,Matlab2016a,VS2013 (ps:老板说服务器要装windows系统,没办法,又要折腾一番,在VS下编译好像在cuda8. ...
- wchar_t是内置还是别名(亲测有效:wchar_t在windows下是16位整数的别名,在linux等平台下是32位整数的别名。MSVC2008开始默认是/Zc:wchar_t)
接前一篇C++ ABI之名字改编(以Qt为例),继续看看C++名字改编相关的问题. 问题 MSVC 有一对选项/Zc:wchar_t- 与 /Zc:wchar_t控制wchar_t 于是 wchar_ ...
- 静态编译 Qt5.7.0 (含 openssl 支持)
关于Qt静态便宜的环境等,请先参见 Win10 + VS2015 下编译 Qt5.6.0 . 首先编译 openssl .我这里用的版本是 openssl 1.0.2j (新的1.1版本的便宜稍有不同 ...
- QT5.1.0,QT4.8.0以及VC2010、VC2012的测试对比
QT5.1.0,QT4.8.0以及VC2010.VC2012的交叉测试对比. 测试1: 用VC2012静态编译了QT5.1.0. 编译速度很慢,生成完成后,用VC2012+QT5.1.0进行程序生成, ...
- VS2010 win7 QT4.8.0,实现VS2010编译调试Qt程序,QtCreator静态发布程序
下载源代码,注意一定是源码压缩包如qt-everywhere-opensource-src-4.8.0.zip, 不是Qt发布的已编译的不同版本的标准库如qt-win-opensource-4.8.0 ...
- 【转】Win7环境下VS2010配置Cocos2d-x-2.1.4最新版本的开发环境(亲测)
http://blog.csdn.net/ccf19881030/article/details/9204801 很久以前使用博客园博主子龙山人的一篇博文<Cocos2d-x win7+vs20 ...
- Win7环境下VS2010配置Cocos2d-x-2.1.4最新版本的开发环境(亲测)
写这篇博客时2D游戏引擎Cocos2d-x的最新版本为2.1.4,记得很久以前使用博客园博主子龙山人的一篇博文<Cocos2d-x win7+vs2010配置图文详解(亲测)>成功配置 ...
- 用mingw静态编译Qt4.8.2和Qt5.1.1(需要修改不少源码)
因为一些乱七八糟的原因,我需要用mingw静态编译Qt4.8.2和Qt5.1.1.经历了一天的折腾之后,自觉编译一下Qt还是件颇为麻烦的事情,故将过程略作总结,以备不时之需. 首先,在编译之前,我需要 ...
随机推荐
- JAVA异常设计原则
异常是面向对象语言非常重要的一个特性,良好的异常设计对程序的可扩展性.可维护性.健壮性都起到至关重要. JAVA根据用处的不同,定义了两类异常 * Checked Exception: Exc ...
- TCP状态转换机说明
建立一个 TCP 连接TCP 是一个面向连接的协议,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接.本节将详细讨论一个TCP 连接是如何建立的以及通信结束后是如何终止的. TCP使用三 ...
- Contributing to Open Source on GitHub(转)
A great way to get involved in open source is to contribute to the existing projects you’re using. G ...
- [C#绘图]在半透明矩形上绘制字符串
首先要绘制一个半透明的矩形,用到的方法当然是FillRectangle().这个函数在调用的时候除了要指明要绘制的矩形外,还要指明填充矩形的背景色.具体的方法就是在绘制矩形的时候传给它一个画刷Brus ...
- js中||和&&的用法
在js中&&.||不一定都是用来判断一个表达式的逻辑值是true.false,更多的是用来依据真值或者假值执行相应操作! a() && b() :如果执行a()后返回t ...
- 修改spfile导致oracle无法启动
今天尝试着调整一下数据库的性能,由于疏忽没有做好备份(spfile.ora),直接修改了MEMORY_TARGET参数,alter system set MEMORY_TARGET=4096m;导致重 ...
- jQuery事件函数bind,live,delegate的区别
DOM树 首先,可视化一个HMTL文档的DOM树是很有帮助的.一个简单的HTML页面看起来就像是这个样子: 事件冒泡(又称事件传播) 当我们点击一个链接时,其触发了链接元素的单击事件,该事件则引发任何 ...
- PC游戏编程(入门篇)(前言写的很不错)
PC游戏编程(入门篇) 第一章 基石 1. 1 BOSS登场--GAF简介 第二章 2D图形程式初体验 2.l 饮水思源--第一个"游戏"程式 2.2 知其所以然一一2D图形学基础 ...
- UITextField align left margin
如果我们想让我们的UITextField输入的字体偏移几个像素,我们常常用空格来代替,有时候我们不想用空格的话怎么办? #import <UIKit/UIKit.h> @interface ...
- 100% width CSS 在 iPad / iPhone Safari 背景被截断 / 显示不全
Tips: 调试 iPad 或 iPhone 可在设置中启动调试模式,在 Mac 中的 Safari 浏览器 同样开启开发者模式后,进行联机调试.功能彪悍. 最近在做一个页面时,发现在 iPad 的 ...