天天看點

VS2010編譯X64位Qt4.8.6安裝QT Addin 1.1.11插件配置VS2010第五步:安裝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 *)" ([email protected]@[email protected]@CAPEAUHDC__@@PEAUHWND__@@[email protected]@@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 *)" ([email protected]@[email protected]@CAHPEAUHWND__@@[email protected]@@Z) 中被引用

E:\Libraries\qt4\src\3rdparty\webkit\Source\WebKit\qt\webcore.lib(PluginViewWin.obj)

QtWebKit

VS2010編譯X64位Qt4.8.6安裝QT Addin 1.1.11插件配置VS2010第五步:安裝Visual Assist X并配置。

通過Find Solution,你會找到hookedBeginPaint的定義在webcore--->PluginViewWin.cpp中。出問題代碼如下:

VS2010編譯X64位Qt4.8.6安裝QT Addin 1.1.11插件配置VS2010第五步:安裝Visual Assist X并配置。

如上圖,打鈎地方_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函數。

VS2010編譯X64位Qt4.8.6安裝QT Addin 1.1.11插件配置VS2010第五步:安裝Visual Assist X并配置。

PaintHooks.asm裡面内容為:

VS2010編譯X64位Qt4.8.6安裝QT Addin 1.1.11插件配置VS2010第五步:安裝Visual Assist X并配置。

到這裡我們就可以下一個結論了,對于vs2010為什麼會報無法解析外部符号 _ HBeginPaint。 原因,就是vs2010采用c++編譯器,是無法編譯彙編語言的。是以需要設定彙編編譯器,單獨編譯PaintHooks.asm檔案,成為二進制檔案PaintHooks.obj。

就這問題,筆者重新羅列一下步驟:

1.選中webcore這個工程,右鍵---》添加----》現有項,将PaintHooks.asm加入到工程當中,在Source Files分類中,可以找到這個檔案。

2.選中webcore這個工程,右鍵---》生成自定義----》勾選“masm(.targets .props)”選項---》确定

VS2010編譯X64位Qt4.8.6安裝QT Addin 1.1.11插件配置VS2010第五步:安裝Visual Assist X并配置。

3.在Source Files分類中,可以找到PaintHooks.asm,選中,右鍵---》屬性--》在“正常”頁籤中,對“項類型”選擇“Microsoft

Macro assembler”--》确定。

VS2010編譯X64位Qt4.8.6安裝QT Addin 1.1.11插件配置VS2010第五步:安裝Visual Assist X并配置。

4.選中PaintHooks.asm,右鍵----》編譯,在.\src\3rdparty\ webkit \Source\WebCore\tmp\obj\release _ shared目錄下,就會生成PaintHooks.obj二進制檔案,這個檔案就可以被c

++代碼直接調用,具體調用回到前面所述c++調用彙編函數代碼。

tst _ qwebpage/tst _ qwebview/tst _ qwebframe:

以上三個工程屬于同一種解決方法。

VS2010編譯X64位Qt4.8.6安裝QT Addin 1.1.11插件配置VS2010第五步:安裝Visual Assist X并配置。

首先,按照提示,定位到問題所在行2682,如下圖

VS2010編譯X64位Qt4.8.6安裝QT Addin 1.1.11插件配置VS2010第五步:安裝Visual Assist X并配置。

根據vs2010紅線提示功能,你會發現TEST _ SOURCE _ DIR提示有問題。滑鼠放在所有變量,會提示一個路徑。實際上這個路徑就是qwebpage/qwebview/qwebframe的源碼路徑。TEST _ SOURCE _ DIR宏在這裡無法識别,是以,隻要在每一個出問題源檔案人工定義該宏值,就可以handle這個bug。我電腦的該路徑為E:\Libraries\qt4\src\3rdparty\ webkit \Source\ WebKit \qt\tests\

VS2010編譯X64位Qt4.8.6安裝QT Addin 1.1.11插件配置VS2010第五步:安裝Visual Assist X并配置。

在頭檔案定義下面加入宏定義為:

#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的菜單。

VS2010編譯X64位Qt4.8.6安裝QT Addin 1.1.11插件配置VS2010第五步:安裝Visual Assist X并配置。

          然後點選QT菜單項,選擇QT Options選項。

VS2010編譯X64位Qt4.8.6安裝QT Addin 1.1.11插件配置VS2010第五步:安裝Visual Assist X并配置。

          然後按照下圖中的步驟,點選Add, 然後選擇QT的安裝目錄,最後點選确定就可以了。

VS2010編譯X64位Qt4.8.6安裝QT Addin 1.1.11插件配置VS2010第五步:安裝Visual Assist X并配置。

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

       首先安裝Visual Assist X的安裝包,按照預設安裝即可。       然後重新打開VS2010,發現菜單項多了VAssistX。

VS2010編譯X64位Qt4.8.6安裝QT Addin 1.1.11插件配置VS2010第五步:安裝Visual Assist X并配置。

             然後,點選VAssistX菜單,并選擇Visual Assist Options選項。

VS2010編譯X64位Qt4.8.6安裝QT Addin 1.1.11插件配置VS2010第五步:安裝Visual Assist X并配置。

      然後按照下面的步驟,依次點選,選擇要包含的QT庫檔案。

VS2010編譯X64位Qt4.8.6安裝QT Addin 1.1.11插件配置VS2010第五步:安裝Visual Assist X并配置。

            最後要添加的常用的庫為:(如果日後,要用其他的庫檔案,再添加即可)

VS2010編譯X64位Qt4.8.6安裝QT Addin 1.1.11插件配置VS2010第五步:安裝Visual Assist X并配置。

      最後再選擇Visual Assist Options選項,點選Performance選項,點選Rebuild即可。

VS2010編譯X64位Qt4.8.6安裝QT Addin 1.1.11插件配置VS2010第五步:安裝Visual Assist X并配置。

使用qt建立工程,報錯

VS2010編譯X64位Qt4.8.6安裝QT Addin 1.1.11插件配置VS2010第五步:安裝Visual Assist X并配置。

1:注意:打開main.cpp檔案,否則 “Qt Project Settings”是灰色,不可選;

VS2010編譯X64位Qt4.8.6安裝QT Addin 1.1.11插件配置VS2010第五步:安裝Visual Assist X并配置。

2:選擇編譯機器上的版本:

VS2010編譯X64位Qt4.8.6安裝QT Addin 1.1.11插件配置VS2010第五步:安裝Visual Assist X并配置。

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