qt 4.6.2 与visual studio 2005 集成(编译方法,以及中间遇到的问题)
不知不觉在蒂森差不多半个月了,哈哈,时间过得很快,过得很充实,近来研究QT,首先嘛,肯定要学会安装了,这最基础的不会更不用说下面的啦。闲话少说,进正题,基本的安装步骤网上多的是,但参考一个大多数情况是安装不上的,总有这样的那样的问题,基本上我是参考了下面的步骤:
Qt 4.6.2 虽然新增了LGPL协议,但这也阻碍了我们在VS中使用Qt。因为免费开源的版本只提供了GCC编译好的二进制库,而没有VC编 译好的二进制库,只有商业版本才有VS编译好的针对Windows的DLL,lib等二进制库。
再者,VC编译器比GCC 还是要强劲很多,并且调试器异常强大。Qt Creator虽然很酷,目前还很粗糙。很多人也更为熟悉VS的界面。用VS编译出二进制库:
1. 下载并安装 qt-sdk-win-opensource-2010.02.1.exe,安装到默认的 c:\qt\2010.02.1。它包含了MingGW和 Qt Creator,以及预编译好的二进制文件(用GCC编译的)。你可以直接使用Qt Creator 开始开发工作,不需要任何额外的配置。
2. 将整个目录 c:\qt\2010.02.1 拷贝一份到 c:\qt\4.6.2-vc。我们将会修改目录c:\qt\4.6.2-vc,使用VC++来编译出所需要的库。这两个目录可以同时存在,Qt使用c:\qt\2010.02.1,Visual Studio 使用 c:\qt\4.6.2-vc。
3. 修改 C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\下的 vsvars32.bat,在环境变量PATH中添加Qt的目录,如 c:\qt\4.5.0-vc\qt,在INCLUDE 添 加上c:\qt\4.5.0-vc\qt\include , 在LIB添加 c:\qt\4.5.0-vc\qt\include, 如:
@set PATH=C:\Qt\4.6.2-vc\qt;c:\Program Files\Microsoft Visual Studio 8\Common7\IDE;c:\Program Files\Microsoft Visual Studio 8\VC\BIN;c:\Program Files\Microsoft Visual Studio 8\Common7\Tools;c:\Windows\Microsoft.NET\Framework\v3.5;c:\Windows\Microsoft.NET\Framework\v2.0.50727;c:\Program Files\Microsoft Visual Studio 8\VC\VCPackages;%PATH%
@set INCLUDE=C:\Qt\4.6.2-vc\qt\include;c:\Program Files\Microsoft Visual Studio 8\VC\ATLMFC\INCLUDE;c:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE;%INCLUDE%
@set LIB=C:\Qt\4.6.2-vc\qt\lib;c:\Program Files\Microsoft Visual Studio 8\VC\ATLMFC\LIB;c:\Program Files\Microsoft Visual Studio 8\VC\LIB;%LIB%
打开一个cmd命令行窗口,把这个文件拖过来执行,这样,你打开的cmd就具有上面设置的环境变量了,但是这些变量只针对你当前的cmd,不会更改本机配置,所以,不要关闭cmd窗口,你需要在这个CMD窗口中完成接下来的命令。
(原文是按照第三步来做的,第一次的时候我也是按这一步骤编译,但由于出了后面的问题,便手动在系统环境变量的path中添加C:\Qt\qt-4.3.1\bin,注意,这里应该对应安装目录,其实效果跟上面的是一样的)
4. 执行
c:\> cd c:\qt\4.5.0-vc\qt
c:\qt\4.5.0-vc\qt> configure -platform win32-msvc2005
上面这行命令,你可以按自己的需要修改,但注意一定要指明 -platform 后的参数,指明想要配置成那个版本的VS。这一步要花点时间,大概60分钟。
5. 输入 nmake,回车,开始编译。这一步跟漫长,我的大概编译 了3个小时~~
注意:如果你是Windows 7下,这里多半会失败,因为Win 7 SDK有Bug,在binary没有resouce区域的时候mt程序是不能把manifest添加到binary中的(参考:http://download.microsoft.com/download/8/8/0/8808A472-6450-4723-9C87-977069714B27/ReleaseNotes.Htm),所以我们需要做一些修改才行,
第一步,在CMD下执行如下命令
c:\qt\4.6.2-vc\qt>echo.>hello.rc
c:\qt\4.6.2-vc\qt> rc.exe /r hello.rc
得到 c:\qt\4.6.2-vc\qt\hello.res 资 源文件。
第二步,修改qmake配置文件,使得Makefile的链接命令中会把hello.res一并链接到binary中。修改mkspecs\win32-msvc2005目录下的qmake.conf文件第52行为
QMAKE_LFLAGS = /NOLOGO C:\Qt\4.6.2-vc\qt\hello.res
这样任何link命令都必然会链接hello.res文件。
然后才能输入nmake开始编译。
6. 安装官方的VS插件qt-vs-addin-1.0.0-beta.exe,
7. 启动 Visual Studio,选择菜单“Qt->Qt Options”,在” Qt Verions ”选项卡点击 “Add”,Version Name随便填,例如 “qt4.6.2-vc”,路径则输入 “C:\Qt\4.6.2-vc\qt”。(网上的资料有 说要建立环境变量QTDIR= C:\Qt\4.6.2-vc\qt,我个人认为是不必要的)。
8. 现在你的Visual Studio 完全具备了Qt的所有功能,新建一个Qt 工程编译运行试一试!
(编译好后,在VS下点击Debug-Debug without debuggine可以看见程序运行的效果,不过
如果直接到debug目录下双击这个exe文件,会提示找不到QtCore4d.dll,这时你需要把C:\Qt\4.5.0-vc\qt\bin加入到PATH环境变量,这目录下还有QtCore4.dll,都是上面编译出来的)。
不过你现在的环境是集成了LGPL版Qt的VS,跟商业版的还是有点不 同。例如Qt Desiner(资源设计器)不是嵌入到VS得,需要通过菜单“Qt->Launch Desiner”来执行(商业版直接双击.ui文件就会启动Qt Desiner)。不过这无关紧要,只是多点几下鼠标而已。
点击“Qt->Launch Linguist”可以启动Qt Linguist,它是一款本地化工具,也十分有用。
接着,遇到了如下问题:

代码
正在创建库 ..\..\..\..\lib\QtWebKitd4.lib 和对象 ..\..\..\..\lib\QtWebKitd4.e
xp
QNetworkReplyHandler.obj : error LNK2001: 无法解析的外部符号 "public: virtual st
ruct QMetaObject const * __thiscall WebCore::FormDataIODevice::metaObject(void)c
onst " (?metaObject@FormDataIODevice@WebCore@@UBEPBUQMetaObject@@XZ)
QNetworkReplyHandler.obj : error LNK2001: 无法解析的外部符号 "public: virtual vo
id * __thiscall WebCore::FormDataIODevice::qt_metacast(char const *)" (?qt_metac
ast@FormDataIODevice@WebCore@@UAEPAXPBD@Z)
QNetworkReplyHandler.obj : error LNK2001: 无法解析的外部符号 "public: virtual in
t __thiscall WebCore::FormDataIODevice::qt_metacall(enum QMetaObject::Call,int,v
oid * *)" (?qt_metacall@FormDataIODevice@WebCore@@UAEHW4Call@QMetaObject@@HPAPAX
@Z)
QNetworkReplyHandler.obj : error LNK2001: 无法解析的外部符号 "public: virtual st
ruct QMetaObject const * __thiscall WebCore::QNetworkReplyHandler::metaObject(vo
id)const " (?metaObject@QNetworkReplyHandler@WebCore@@UBEPBUQMetaObject@@XZ)
QNetworkReplyHandler.obj : error LNK2001: 无法解析的外部符号 "public: virtual vo
id * __thiscall WebCore::QNetworkReplyHandler::qt_metacast(char const *)" (?qt_m
etacast@QNetworkReplyHandler@WebCore@@UAEPAXPBD@Z)
QNetworkReplyHandler.obj : error LNK2001: 无法解析的外部符号 "public: virtual in
t __thiscall WebCore::QNetworkReplyHandler::qt_metacall(enum QMetaObject::Call,i
nt,void * *)" (?qt_metacall@QNetworkReplyHandler@WebCore@@UAEHW4Call@QMetaObject
@@HPAPAX@Z)
QNetworkReplyHandler.obj : error LNK2019: 无法解析的外部符号 "protected: void __
thiscall WebCore::QNetworkReplyHandler::processQueuedItems(void)" (?processQueue
dItems@QNetworkReplyHandler@WebCore@@IAEXXZ),该符号在函数 "public: void __thisc
all WebCore::QNetworkReplyHandler::setLoadMode(enum WebCore::QNetworkReplyHandle
r::LoadMode)" (?setLoadMode@QNetworkReplyHandler@WebCore@@QAEXW4LoadMode@12@@Z)
中被引用
FrameLoaderClientQt.obj : error LNK2019: 无法解析的外部符号 "protected: void __t
hiscall QWebPage::unsupportedContent(class QNetworkReply *)" (?unsupportedConten
t@QWebPage@@IAEXPAVQNetworkReply@@@Z),该符号在函数 "public: virtual void __this
call WebCore::FrameLoaderClientQt::download(class WebCore::ResourceHandle *,stru
ct WebCore::ResourceRequest const &,struct WebCore::ResourceRequest const &,clas
s WebCore::ResourceResponse const &)" (?download@FrameLoaderClientQt@WebCore@@UA
EXPAVResourceHandle@2@ABUResourceRequest@2@1ABVResourceResponse@2@@Z) 中被引用
FrameLoaderClientQt.obj : error LNK2019: 无法解析的外部符号 "protected: void __t
hiscall QWebPage::downloadRequested(class QNetworkRequest const &)" (?downloadRe
quested@QWebPage@@IAEXABVQNetworkRequest@@@Z),该符号在函数 "public: virtual voi
d __thiscall WebCore::FrameLoaderClientQt::startDownload(struct WebCore::Resourc
eRequest const &)" (?startDownload@FrameLoaderClientQt@WebCore@@UAEXABUResourceR
equest@2@@Z) 中被引用
..\..\..\..\lib\QtWebKitd4.dll : fatal error LNK1120: 9 个无法解析的外部命令
NMAKE : fatal error U1077: “"C:\Program Files\Microsoft Visual Studio 8\VC\BIN\
link.EXE"”: 返回代码“0x460”
Stop.
NMAKE : fatal error U1077: “"C:\Program Files\Microsoft Visual Studio 8\VC\BIN\
nmake.exe"”: 返回代码“0x2”
Stop.
NMAKE : fatal error U1077: “cd”: 返回代码“0x2”
Stop.

解决方法:删除QT目录下的mocinclude.tmp文件,大致路径如下:src/3rdparty/webkit/WebCore/tmp/moc/{debug,release}_shared/mocinclude.tmp,再nmake一次,之后又出现了如下错误:

代码
api\qscriptextensionplugin.h(43): Error: Undefined interface
NMAKE : fatal error U1077: “C:\Qt\4.6.2-vc\qt\bin\moc.exe”: 返回代码“0x1”
Stop.
NMAKE : fatal error U1077: “"C:\Program Files\Microsoft Visual Studio 8\VC\BIN\
nmake.exe"”: 返回代码“0x2”
Stop.
NMAKE : fatal error U1077: “cd”: 返回代码“0x2”
Stop.

解决方法是将:qt/src/script/tmp/moc/debug_shared/mocinclude.tmp、
qt/src/script/tmp/moc/release_shared/mocinclude.tmp删除,然后继续编译就ok了。
http://www.cnblogs.com/bingcaihuang/archive/2010/12/02/1894005.html
qt 4.6.2 与visual studio 2005 集成(编译方法,以及中间遇到的问题)的更多相关文章
- visual studio开启多核编译方法《转》
原文:https://blog.csdn.net/acaiwlj/article/details/50240625 visual studio在编译时可以启动多核并行编译,以减少编译所需时间.话不多说 ...
- Visual Studio 2005安装qt-win-commercial-src-4.3.1,并设置环境变量
虽然已经在Visual Studio 2005下安装Qt4已经n次了,还是打算在上写写安装方法. qt-win-commercial-src-4.3.1.zip.qt-vs-integration-1 ...
- Using Nuget in Visual Studio 2005 & 2008
NuGet is a Visual Studio extension that makes it easy to install and update third-party libraries an ...
- Visual Studio 2005 搭建Windows CE 6.0环境之准备
Microsoft Visual Studio 2005 Visual Studio 2005 Professional 官方90天试用版英文版:http://download.microsoft.c ...
- Visual Studio 2005 移植 - WINVER,warning C4996, error LINK1104
Visual Studio 2005 移植 - WINVER,warning C4996, error LINK1104 一.WINVER Compile result: WINVER not d ...
- visual studio 2005提示脚本错误 /VC/VCWizards/2052/Common.js
今天在做OCX添加接口的时候,莫名其妙的遇到visual studio 2005提示脚本错误,/VC/VCWizards/2052/Common.js. 网上找了很多资料,多数介绍修改注册表“vs20 ...
- Visual Studio 2005 自带单元测试
一 单元测试简介 单元测试是代码正确性验证的最重要的工具,也是系统测试当中最重要的环节.也是唯一需要编写代码才能进行测试的一种测试方法.在标准的开发过程中,单元测试的代码与实际程序的代码具有同等的 ...
- visual studio 2005 win7 64位版下载
http://www.121down.com/soft/softview-19659.html 软件标签: visual studio visual studio 2005是由微软推出的一款基于.ne ...
- win7兼容visual studio 2005 的方法
http://blog.sina.com.cn/s/blog_74d572890100xv7p.html 今天花了4个小时,结合网上的介绍,本人终于找到了一个可以在win7环境下运行visual st ...
随机推荐
- 2016.6.17 kali Linux 隧道工具
隧道工具的基本概念: 1.在计算机网络中,隧道工具是指使用一种网络协议去封装另一种网络协议的技术. 2.通常用来数据伪装或者穿越防火墙,在入侵目标系统后,可用来提升权限和权限维持. Kali中的隧道工 ...
- Javascript的对象封装和继承有哪些方法?优劣分别是什么?
1.对象封装方法 (1)原始模式生成对象 直接将我们的成员写入对象中,用函数返回. 缺点:很难看出是一个模式出来的实例. function Stu(name, score) { ...
- javascript reverse string
var strReversed = str.split('').reverse().join(''); function: function reverse(str){ return str.spli ...
- android 屏幕截取,pull到pc端
1.当需要截取手机屏幕时,进行批命令点击,截取adb pull到电脑端,或者进行接口上传到服务器. GetScreen.bat @ECHO OFF :: read config.cfg SETLOCA ...
- COJ980 WZJ的数据结构(负二十)
试题描述 在Bytemountains有N座山峰,每座山峰有他的高度h_i.有些山峰之间有双向道路相连,共M条路径,每条路径有一个困难值,这个值越大表示越难走,现在有Q组询问,每组询问询问从点v开始只 ...
- asp.net 微信企业号办公系统-流程设计--保存与发布
如果流程未设计完时可以先保存,以后再打开接着设计.点击工具栏上的保存按钮即可保存当前流程设计: 如果下次要接着设计,则可以打开该流程继续设计: 如果流程设计完成,可以点击安装按钮来发布流程,流程安装成 ...
- jquery easyui datagrid 分页详解
由于项目原因,用了jquery easyui 感觉界面不错,皮肤样式少点,可是官网最近打不开了,资料比较少,给的demo没有想要的效果,今天在用datagrid 做分页显示的时候,折腾了半天,网上的资 ...
- DOS命令下输入:java Hello 出现以下几种结果可能的原因:
DOS命令下输入:java Hello 出现以下结果:Bad command or the file name 没有这个命令或文件名 原因可能是没有成功安装jdk或者没有配置好jdk 的环境变量,或者 ...
- The declared package does not match the expected package
The declared package does not match the expected package. 1.选中项目右击选择Build Path-->再选择Configure Bui ...
- 移动Web—CSS为Retina屏幕替换更高质量的图片
来源:互联网 作者:佚名 时间:12-24 10:37:45 [大 中 小] 点评:Retian似乎是屏幕显示的一种趋势,这也是Web设计师面对的一个新挑战;移动应用程序的设计师们已经学会了如何为Re ...