win7 64位編譯WebKit核心

LAN_YT發表於2013-06-06
該過程主要參照Moon出品的Win7+VS2010編譯WebKit總結(http://blog.csdn.net/wxdvc/article/details/8508077),表示感謝。
順帶留個qq:345271592,歡迎交流。


1.安裝VS2010,最好是英文版,並使用預設路徑安裝(沒敢換,怕出錯。。。坑爹)


2.安裝SP1:Visual Studio 2010 SP1.(下載頁面:http://www.microsoft.com/download/en/details.aspx?id=23691,下載連結: http://download.microsoft.com/download/E/B/A/EBA0A152-F426-47E6-9E3F-EFB686E3CA20/VS2010SP1dvd1.iso,檔案大小:1.48GB),最好也用英文版的。。。。


3.安裝Windows SDK 7.1.(容易出錯)(下載頁面:Windows SDK 7.1.(下載頁面:http://www.microsoft.com/download/en/details.aspx?id=8442,下載連結: http://download.microsoft.com/download/F/1/0/F10113F5-B750-4969-A255-274341AC6BCE/GRMSDK_EN_DVD.iso,檔案大小:567MB)注意需要根據自己的機器進行選擇,64位與32位是不同的)
  錯誤如下,可能有些錯誤,有些機器不會遇到,以下是我遇到的錯誤:
  1>.出錯內容:Installation of the "Microsoft Windows SDK for Windows 7" product has reported the following error: Please refer to SamplesSetupHTMLConfigDetails.htm document for further information.
    解決辦法:在控制皮膚裡解除安裝:Microsoft Visual C++ 2010 x86 Redistributable和Microsoft Visual C++ 2010 x64 Redistributable兩項,也許你的是一項,總之解除安裝就對了。(另外可參考:http://www.cnblogs.com/duanshuiliu/archive/2013/04/02/2994776.html)
    參考地址:http://support.microsoft.com/kb/2717426
  2>.出錯內容:A problem occurred while installing selected Windows SDK components.


Installation of the "Microsoft Windows SDK for Windows 7 Compilers for x86" product has reported the following error: 安裝時發生嚴重錯誤


Please attempt to resolve the problem and then start Windows SDK setup again. If you continue to have problems with this issue, please visit the SDK team support page at http://go.microsoft.com/fwlink/?LinkId=130245.


    解決辦法:安裝SDK ver7.1時不要勾選Visual C++ compiler,裝完後安裝KB2519277


4.安裝QuickTimeSDK
  該SDK下載比較麻煩,需要申請AppleID等等,我已經上傳到我的資源中,供大家下載使用,資源中有三部分,前兩個可能不會用到,只是下載時我一併下載了,主要用到quicktimesdk.zip中的exe安裝。(下載頁面:http://developer.apple.com/quicktime/download/,下載連結: http://adcdownload.apple.com/QuickTime/quicktime_7.3_sdk_for_windows/quicktimesdk.zip,檔案大小:2.02MB)


5.安裝DirectX SDK(下載頁面:http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=2c7da5fb-ffbb-4af6-8c66-651cbd28ca15,下載連結: http://download.microsoft.com/download/F/1/7/F178BCE4-FA19-428F-BB60-F3DEE1130BFA/DXSDK_Feb10.exe,檔案大小:554MB),這個需要驗證系統是否正版,照著流程做完就可下載了,盜版我不知道能否下載到。


6.編譯過程:
  與原始檔資料夾相關的修改
現在假設你的原始碼資料夾名為WebKitSource。以我為例,我解壓原始檔壓縮包之後得到的資料夾WebKit-r128959就相當於這裡的WebKitSource資料夾。
將WebKitSupportLibrary.zip拷貝到WebKitSource下。注意,不要解壓。


以下的vs2010-build-env.cmd和pdenenv在我的資源中下載即可。
將vs2010-build-env.cmd拷貝到WebKitSource下,修改其中set CYGWIN_SOURCE_DIR=C:cygwin等號右邊的值,即你電腦中Cygwin的安裝目錄。另外,我將CYGWIN_DIR設定為C:cygwin_dir,你可以根據自己的需要修改。


將pdenenv拷貝到WebKitSource/Tools/Scripts下覆蓋原版。


將WebKitSource/Source/WebCore/Modules/quota中的檔案全部拷貝到WebKitSource/Source/WebCore/storage中去。


用VS2010開啟WebKitSource/Source/WebKit /win/ WebKit.vcproj / WebKit.sln,IDE會彈出一個Conversion Wizard告知你需要對方案(solution)或工程(project)進行轉換,點選下一步完成轉換。


將WebKitSource/Tools/vcbin下的cl.exe和midl.exe重新命名為cl-.exe和midl-.exe(即讓它們失效)。


開啟WebKitLibraries /win/ tools/ vsprops/ common.props,修改TreatWarningAsError為false。


開啟 Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def,刪除


其中的“?nullptr@@3Vnullptr_t@std@@A”。


找到 WebKitSource/ Source/ WebCore/ platform/ network/ curl/ CookieJarCurl.cpp和 WebKitSource/ Source/ WebCore/ platform/ image-decodersImageDecoder.cpp,右鍵開啟Properties選單,選擇Configuration Properties>General,修改Item Tyep為C/C++ compiler。(10月9日後記:我嘗試找了一下這兩個原始檔竟然沒找到,我當初的確修改過,此問題留待修改)注意:上述修改是在vs2010的編譯器中進行。


開啟WebCore/ platform/ LocalizedString.cpp,在264行和266行中有"Look Up “%@”"和"Look Up “<selection>”"注意%@和<selection>兩邊的雙引號是全形的,然後刪除這些全形的引號即可。


開啟WebKitSource/Source/WebCore/platform/ graphics/ cg目錄下的ImageSourceCG.h、WebKitSource/Source/WebCore/platform/ network/ cf目錄下的SocketStreamHandle.h和SocketStreamError.h三個標頭檔案,在#define xxx_h(以ImageSourceCG.h為例xxx_h就是ImageSourceCG_h)這行後面新增:
#ifndef ExportMacros_h
#include "config.h"
//你可以取消下面這行的註釋,在編譯過程中可能會看到我寫的提示資訊
//#pragma message("===>缺少定義,手動引入config.h")
#endif
在TestWebKitAPI工程的config.h(WebKitSource/ Tools/ TestWebKitAPI/ config.h)首部新增:#define _ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH


Ashod編寫(我新增了一些中文註釋)的vs2010-build-env.cmd首先建立了一些連結,這樣你就不必再把WebKitSource資料夾移動到Cygwin的使用者目錄下了;然後設定了一些必要的環境變數:WEBKITOUTPUTDIR(編譯結果的輸出目錄)、WEBKITLIBRARIESDIR(WebKit相關庫的目錄)、VSINSTALLDIR(VS100COMNTOOLS是安裝VS2010後自動新增的一個環境變數,set VSINSTALLDIR=%VS100COMNTOOLS%....就獲得了VS2010的安裝目錄)、PATH(執行指令碼的路徑,在預設PATH的基礎上新增了%WEBKIT_DIR%ToolsScripts和%CYGWIN_DIR%bin);最後指令碼直接啟動了Cygwin。




針對基於VS2010的編譯,Ashod對pdenev指令碼進行了一些修改(這個指令碼本來是WebKit團隊針對VS2005所寫的),自動實現了5、6、7、8的修改。為了保險起見,你可以手動進行一下這些修改。


至於第9個修改,我是在Ashod的博文中看到的。我覺得這個修改不做也沒有影響,同時我也不確定Ashod所寫的pdenev中是否自動實現了這個修改,但是我確定進行這個修改不會導致編譯失敗。


根據經驗,標頭檔案並不是編譯單元,編譯器會直接用標頭檔案的內容替換#include的位置。但是,我在編譯的過程中發現ImageSourceCG.h、SocketStreamHandle.h和SocketStreamError.h這三個標頭檔案就好像被單獨編譯了,因而在單獨編譯的時候因為找不到某些符號而報錯,而config.h所包含的那些標頭檔案中對這些符號進行了完整的定義。於是乎,我新增了第11步中的幾行程式碼以確保這三個標頭檔案始終能找到所需的符號。


第12步所做的操作是為了一個連結錯誤,這個錯誤產生的原因是編譯時用Release模式去連結了一個Debug編譯出的lib,或者用Debug模式連結了Release編譯的lib。加入12中的那個巨集就遮蔽了匹配檢測,從而避免了這個錯誤。


以上摘抄自:http://blog.csdn.net/wxdvc/article/details/8508077,有點兒小的修改。




出錯處理:
1.error MSB6001: Invalid command line switch for "CL.exe". Item has already been added. Key in dictionary: 'tmp'  Key being added: 'TMP'


 解決方法:使用Notepad+開啟cygwin//etc//profile檔案,將其中的原始碼註釋為如下格式,註釋前程式碼前沒有‘#’(此為註釋符號),下面是註釋後的樣子。
 # ORIGINAL_TMP=$TMP
 # ORIGINAL_TEMP=$TEMP
 # unset TMP TEMP
 # tmp=$(cygpath -w "$ORIGINAL_TMP" 2> /dev/null)
 # temp=$(cygpath -w "$ORIGINAL_TEMP" 2> /dev/null)
 # TMP="/tmp"
 # TEMP="/tmp"

在上述應用的作者解決方法中,說只註釋unset TMP TEMP一行即可。


 重要:註釋完一定要重啟計算機再編譯,否則錯誤同樣出現,我當時就在這裡載了跟頭。




2.開始編譯
如果這些操作都順利完成,你就可以雙擊vs2010-build-env.cmd嘗試編譯了。在Cygwin命令列中你需要輸入:
cpan HTTP::Date(這個操作可能只在第一次編譯的時候要用到,事實上與環境相關)。


update-webkit(這個操作每個原始檔資料夾第一次編譯的時候要用到,下載並安裝WebKitAuxiliaryLibrary.zip)。


build-webkit --debug | tee log.txt。


build-webkit --debug | tee log.txt是以Debug模式進行編譯,同時將編譯資訊輸出到Cygwin使用者目錄下log.txt中去。你完全可以寫成C:log.txt或C:/log.txt以便檢視log。另外,我在編譯的過程中會使用tee logMMDDHHMM.txt(如log05211314.txt就代表5月21日13點14分的log,我的不能成功顯示成這個樣子,不知原因),推薦大家這樣做,儲存log對於診斷並解決錯誤至關重要。



編譯成功後,執行上述作者所說的MiniBrowser遇到一下錯誤:Failed to determine path to Apple Application Support directory.

解決辦法:參照http://www.cnblogs.com/xyz2abc/archive/2012/04/09/2438913.html地址所述方法,注意要新增的位置,萬萬注意。

相關文章