VS2010编译X64位Qt4.8.6

VS2010下Qt4.8.6编译指南
本文详细介绍了如何在Windows 7 64位系统下使用VS2010编译Qt4.8.6,并解决了编译过程中遇到的错误LNK2019等问题,同时提供了配置QT Addin及Visual Assist X的方法。

编译环境:

(1) win7/64

(2) VS2010

(3) qt-everywhere-opensource-src-4.8.6.zip


2.1 开始  -> 所有程序 ->Micorsoft Visual Studio 2010->visual studio tools-> Visual Studio x64 win64 command prompt (2010)

     2.2 用cd命令 进入D:\QtLib_4.8.6\qt-everywhere-opensource-src-4.8.6文件夹

     2.3 设置如下环境变量:

            set QTDIR=D:\QtLib_4.8.6\qt-everywhere-opensource-src-4.8.6

            set QMAKESPEC=win32-msvc2010

   2.4 修改一些错误:

        (1)打开这个文件:<Qt Dir>\src\3rdparty\webkit\Source\WebCore\platform\DefaultLocalizationStrategy.cpp
       按Ctrl+G定位 到 327 行, 改为:
    return WEB_UI_STRING("Look Up \"<selection>\"", "Look Up context menu item with selected word").replace("<selection>", truncatedStringForLookupMenuItem(selectedString));

       注意第一个括号内look up 后的双引号。

      (2)--- mkspecs/win32-msvc2010/qmake.conf
        +++ mkspecs/win32-msvc2010/qmake.conf

       QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO = /DEBUG /OPT:REF

       QMAKE_LFLAGS_DEBUG      = /DEBUG

       修改为

      QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO = /DEBUG /OPT:REF /INCREMENTAL:NO
      QMAKE_LFLAGS_DEBUG      = /DEBUG /INCREMENTAL:NO

   2.5  配置编译QT的选项 (可利用configure -hlep命令查看各选项意义,自己选择编译模块)

        

  configure -opensource -nomake demos -nomake examples -platform win32-msvc2010 -webkit

        提示:Do you accept the terms of the lisence ?  输入y, 则开始编译qmake工具

   2.6  Configure完成后,会在D:\QtLib_4.8.6\qt-everywhere-opensource-src-4.8.6下生成Project.sln,使用VS2010打开后进行release/debug x64 编译


错误 234 
error LNK2019: 无法解析的外部符号 _HBeginPaint,该符号在函数 "private: static struct HDC__ * __cdecl
WebCore::PluginView::hookedBeginPaint(struct HWND__ *,struct tagPAINTSTRUCT *)" (?hookedBeginPaint@PluginView@WebCore@@CAPEAUHDC__@@PEAUHWND__@@PEAUtagPAINTSTRUCT@@@Z) 中被引用
E:\Libraries\qt4\src\3rdparty\webkit\Source\WebKit\qt\webcore.lib(PluginViewWin.obj)
QtWebKit

错误 235 
error LNK2019: 无法解析的外部符号 _HEndPaint,该符号在函数 "private: static int __cdecl
WebCore::PluginView::hookedEndPaint(struct HWND__ *,struct tagPAINTSTRUCT const *)" (?hookedEndPaint@PluginView@WebCore@@CAHPEAUHWND__@@PEBUtagPAINTSTRUCT@@@Z) 中被引用
E:\Libraries\qt4\src\3rdparty\webkit\Source\WebKit\qt\webcore.lib(PluginViewWin.obj)
QtWebKit



通过Find Solution,你会找到hookedBeginPaint的定义在webcore--->PluginViewWin.cpp中。出问题代码如下:



如上图,打钩地方_HBeginPaint函数是一个无法解析外部符号,其实本质原因无非就是_HBeginPaint定义代码,没有加载进入工程当中。这是为什么呢???

从本源文件开头,有_HBeginPaint的定义,你会发现这是一种c++调用汇编代码方式。

#if OS(WINDOWS) && CPU(X86_64) && COMPILER(MSVC)
extern "C" HDC __stdcall _HBeginPaint(HWND hWnd, LPPAINTSTRUCT lpPaint);
extern "C" BOOL __stdcall _HEndPaint(HWND hWnd, const PAINTSTRUCT* lpPaint);
#endif
验证想法的是,在PluginViewWin.cpp同目录下,有一个汇编文件PaintHooks.asm,使用普通记事本打开,你会发现,里面就是定义了_HBeginPaint函数。


PaintHooks.asm里面内容为:



到这里我们就可以下一个结论了,对于vs2010为什么会报无法解析外部符号_HBeginPaint。原因,就是vs2010采用c++编译器,是无法编译汇编语言的。所以需要设置汇编编译器,单独编译PaintHooks.asm文件,成为二进制文件PaintHooks.obj。


就这问题,笔者重新罗列一下步骤:

1.选中webcore这个工程,右键---》添加----》现有项,将PaintHooks.asm加入到工程当中,在Source Files分类中,可以找到这个文件。

2.选中webcore这个工程,右键---》生成自定义----》勾选“masm(.targets .props)”选项---》确定



3.在Source Files分类中,可以找到PaintHooks.asm,选中,右键---》属性--》在“常规”选项卡中,对“项类型”选择“Microsoft
Macro assembler”--》确定。



4.选中PaintHooks.asm,右键----》编译,在.\src\3rdparty\webkit\Source\WebCore\tmp\obj\release_shared目录下,就会生成PaintHooks.obj二进制文件,这个文件就可以被c

++代码直接调用,具体调用回到前面所述c++调用汇编函数代码。


tst_qwebpage/tst_qwebview/tst_qwebframe:

以上三个工程属于同一种解决方法。


首先,按照提示,定位到问题所在行2682,如下图



根据vs2010红线提示功能,你会发现TEST_SOURCE_DIR提示有问题。鼠标放在所有变量,会提示一个路径。实际上这个路径就是qwebpage/qwebview/qwebframe的源码路径。TEST_SOURCE_DIR宏在这里无法识别,所以,只要在每一个出问题源文件人工定义该宏值,就可以handle这个bug。我电脑的该路径为E:\Libraries\qt4\src\3rdparty\webkit\Source\WebKit\qt\tests\



在头文件定义下面加入宏定义为:

#include <qwebsecurityorigin.h>
#include <qwebview.h>
#include <qimagewriter.h>

#define TESTS_SOURCE_DIR "E:/Libraries/qt4/src/3rdparty/webkit/Source/WebKit/qt/tests/"
重新编译,就可以解决这个问题了。

 

安装QT Addin 1.1.11插件

              插件也是什么都不用改,按照默认配置进行安装。 QT Addin 1.11安装完成之后,就可以在VS里面进行QT项目的开发了。

配置VS2010

           然后介绍怎么配置VS2010中的QT目录。

           打开VS2010,发现菜单栏多了QT的菜单。


          然后点击QT菜单项,选择QT Options选项。


          然后按照下图中的步骤,点击Add, 然后选择QT的安装目录,最后点击确定就可以了。



第五步:安装Visual Assist X并配置。

      首先安装Visual Assist X的安装包,按照默认安装即可。
      然后重新打开VS2010,发现菜单项多了VAssistX。

      
      然后,点击VAssistX菜单,并选择Visual Assist Options选项。


      然后按照下面的步骤,依次点击,选择要包含的QT库文件。

     
      最后要添加的常用的库为:(如果日后,要用其他的库文件,再添加即可)


      最后再选择Visual Assist Options选项,点击Performance选项,点击Rebuild即可。

   

使用qt建立工程,报错

     


1:注意:打开main.cpp文件,否则 “Qt Project Settings”是灰色,不可选;


2:选择编译机器上的版本:

Version修改为Qt4.8.6版本,而不是msvc2010即可


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值