zoukankan      html  css  js  c++  java
  • 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:qt2010.02.1。它包含了MingGW和 Qt Creator,以及预编译好的二进制文件(用GCC编译的)。你可以直接使用Qt Creator 开始开发工作,不需要任何额外的配置。

        2. 将整个目录 c:qt2010.02.1 拷贝一份到 c:qt4.6.2-vc。我们将会修改目录c:qt4.6.2-vc,使用VC++来编译出所需要的库。这两个目录可以同时存在,Qt使用c:qt2010.02.1,Visual Studio 使用 c:qt4.6.2-vc。

        3. 修改 C:Program FilesMicrosoft Visual Studio 8Common7Tools下的 vsvars32.bat,在环境变量PATH中添加Qt的目录,如 c:qt4.5.0-vcqt,在INCLUDE 添 加上c:qt4.5.0-vcqtinclude , 在LIB添加 c:qt4.5.0-vcqtinclude, 如:

        @set PATH=C:Qt4.6.2-vcqt;c:Program FilesMicrosoft Visual Studio 8Common7IDE;c:Program FilesMicrosoft Visual Studio 8VCBIN;c:Program FilesMicrosoft Visual Studio 8Common7Tools;c:WindowsMicrosoft.NETFrameworkv3.5;c:WindowsMicrosoft.NETFrameworkv2.0.50727;c:Program FilesMicrosoft Visual Studio 8VCVCPackages;%PATH%

        @set INCLUDE=C:Qt4.6.2-vcqtinclude;c:Program FilesMicrosoft Visual Studio 8VCATLMFCINCLUDE;c:Program FilesMicrosoft Visual Studio 8VCINCLUDE;%INCLUDE%

        @set LIB=C:Qt4.6.2-vcqtlib;c:Program FilesMicrosoft Visual Studio 8VCATLMFCLIB;c:Program FilesMicrosoft Visual Studio 8VCLIB;%LIB%

    打开一个cmd命令行窗口,把这个文件拖过来执行,这样,你打开的cmd就具有上面设置的环境变量了,但是这些变量只针对你当前的cmd,不会更改本机配置,所以,不要关闭cmd窗口,你需要在这个CMD窗口中完成接下来的命令。

    (原文是按照第三步来做的,第一次的时候我也是按这一步骤编译,但由于出了后面的问题,便手动在系统环境变量的path中添加C:Qtqt-4.3.1in,注意,这里应该对应安装目录,其实效果跟上面的是一样的)

    4. 执行

    c:> cd c:qt4.5.0-vcqt

    c:qt4.5.0-vcqt> 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:qt4.6.2-vcqt>echo.>hello.rc

    c:qt4.6.2-vcqt> rc.exe /r hello.rc

    得到 c:qt4.6.2-vcqthello.res 资 源文件。

    第二步,修改qmake配置文件,使得Makefile的链接命令中会把hello.res一并链接到binary中。修改mkspecswin32-msvc2005目录下的qmake.conf文件第52行为

    QMAKE_LFLAGS = /NOLOGO C:Qt4.6.2-vcqthello.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:Qt4.6.2-vcqt”。(网上的资料有 说要建立环境变量QTDIR= C:Qt4.6.2-vcqt,我个人认为是不必要的)。

    8. 现在你的Visual Studio 完全具备了Qt的所有功能,新建一个Qt 工程编译运行试一试!

    (编译好后,在VS下点击Debug-Debug without debuggine可以看见程序运行的效果,不过

    如果直接到debug目录下双击这个exe文件,会提示找不到QtCore4d.dll,这时你需要把C:Qt4.5.0-vcqtin加入到PATH环境变量,这目录下还有QtCore4.dll,都是上面编译出来的)。

    不过你现在的环境是集成了LGPL版Qt的VS,跟商业版的还是有点不 同。例如Qt Desiner(资源设计器)不是嵌入到VS得,需要通过菜单“Qt->Launch Desiner”来执行(商业版直接双击.ui文件就会启动Qt Desiner)。不过这无关紧要,只是多点几下鼠标而已。

    点击“Qt->Launch Linguist”可以启动Qt Linguist,它是一款本地化工具,也十分有用。

    接着,遇到了如下问题:

    复制代码
    代码
    正在创建库 ........libQtWebKitd4.lib 和对象 ........libQtWebKitd4.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) 中被引用
    ........libQtWebKitd4.dll : fatal error LNK1120: 9 个无法解析的外部命令
    NMAKE : fatal error U1077: “"C:Program FilesMicrosoft Visual Studio 8VCBIN
    link.EXE"”: 返回代码“0x460”
    Stop.
    NMAKE : fatal error U1077: “"C:Program FilesMicrosoft Visual Studio 8VCBIN
    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一次,之后又出现了如下错误:

    复制代码
    代码
    apiqscriptextensionplugin.h(43): Error: Undefined interface  
    NMAKE : fatal error U1077: “C:Qt4.6.2-vcqtinmoc.exe”: 返回代码“0x1”
    Stop.
    NMAKE : fatal error U1077: “"C:Program FilesMicrosoft Visual Studio 8VCBIN
    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

  • 相关阅读:
    JS身份证验证 根据身份证计算生日 年龄
    手机号码归属地TXT文档数据写入DB
    页面返回 上一页 下一页
    ASP.NET 出错页面处理
    添加外鍵
    WinForm Read Excel
    Winform 中实现省市联动效果
    微信支付之二维码支付(native)
    C#多线程同步(转)
    HTTP超文本传输协议HTTP/1.1中文版(收藏)
  • 原文地址:https://www.cnblogs.com/findumars/p/6152924.html
Copyright © 2011-2022 走看看