天天看點

Win7+VS2010編譯WebKit總結

【轉載請注明出處: http://blog.csdn.net/lzl124631x】

編譯WebKit可謂曆盡千辛萬苦,多虧了老師的鼓勵和督促、Ashod和師姐的幫助,才能最終曆經九九八十一難,成功地将WebKit編譯,得道升天…現将所有有關WebKit及其編譯流程的知識以及經驗總結如下,供大家分享和批評指正。

================================================================

WebKit

Win7+VS2010編譯WebKit總結

WebKit WebKit是一個開源的浏覽器引擎,與之相對應的引擎有Gecko(Mozilla FireFox等使用)和Trident(也稱MSHTML,IE使用)。同時WebKit 也是蘋果Mac OS X 系統引擎架構版本的名稱,主要用于Safari,Dashboard,Mail 和其他一些Mac OS X 程式。WebKit 前身是 KDE(K桌面環境,Kool Desktop Environment) 小組的 KHTML,WebKit 所包含的 WebCore 排版引擎和 JavaScriptCore 引擎來自于 KDE 的 KHTML 和 KJS。當年蘋果比較了 Gecko 和 KHTML 後,仍然選擇了後者,就因為它擁有清晰的源碼結構、極快的渲染速度。Apple将 KHTML 發揚光大,推出了裝備 KHTML 改進型 WebKit 引擎的浏覽器 Safari。

WebKit的官方網站是 http://www.webkit.org/

談到WebKit,不得不提的是Google Chrome。Google Chrome是由Google公司開發的開放源碼的網頁浏覽器,它是基于其他開放源碼軟體(包括WebKit和Mozilla)所撰寫的,目标是提升穩定性、速度和安全性,并創造出簡單且有效率的使用者界面。2012年8月6日,Chrome已達全球份額的34%,是使用最廣泛的浏覽器。

值得一提的是,雖然Chrome是基于WebKit引擎的,但是Chrome的JavaScript引擎使用的是Google自己開發的V8引擎,它是Google丹麥使用C++開發的開源JavaScript引擎。Safari3.1以前的版本使用JavaScriptCore,而從4.0以後Safari選擇了同樣是WebKit團隊開發的新一代JavaScript引擎SquirrelFish(最終被稱為Nitro)以及更新一代的SquirrelFish Extreme(簡稱SFX)。

Win7+VS2010編譯WebKit總結

SquirrelFish

其他主流浏覽器所使用的JavaScript引擎: Mozilla

SpiderMonKey:第一款JavaScript引擎,由Brendan Eich在Netscape Communications時編寫,用于Mozilla Firefox 1.0~3.0版本。

Rhino:由Mozilla基金會管理,開放源代碼,完全以Java編寫。

TraceMonkey:基于實時編譯的引擎,其中部份代碼取自Tamarin引擎,用于Mozilla Firefox 3.5~3.6版本。

JaegerMonkey:德文Jäger原意為獵人,結合追蹤群組合碼技術大幅提高性能,部分技術借鑿了V8、JavaScriptCore、WebKit,用于Mozilla Firefox 4.0以上版本。

Internet Explorer

Chakra (JScript引擎):中文譯名為查克拉,用于Internet Explorer 9的32位版本。

Opera

Linear A:用于Opera 4.0~6.1版本。

Linear B:用于Opera 7.0~9.2版本。

Futhark:用于Opera 9.5~10.2版本。

Carakan:由Opera軟體公司編寫,自Opera10.50版本開始使用。

其它

KJS:KDE的ECMAScript/JavaScript引擎,最初由Harri Porten開發,用于KDE項目的Konqueror網頁浏覽器中。

Narcissus:開放源代碼,由Brendan Eich編寫(他也參與編寫了第一個SpiderMonkey)。

Tamarin:由Adobe Labs編寫,Flash Player 9所使用的引擎。

一個典型的浏覽器有兩個必不可少的組成部分:渲染引擎和獨立的JavaScript引擎。JavaScript引擎的獨立性確定它能夠被更友善的測試、重新生成或者在另一些項目中使用。例如Carakan被用在Presto中,Nitro被用在WebKit中,SpiderMonkey被用在Gecko中,KJS被用在KHTML中,Rhino預設不包含任何布局引擎。當然還有其他組合,例如V8與WebKit被用于Chrome浏覽器中。

================================================================

Chromium

Win7+VS2010編譯WebKit總結

Chromium的舊logo Chromium 是 Google Chrome浏覽器背後的引擎,其目的是為了建立一個安全、穩定和快速的通用浏覽器。

Win7+VS2010編譯WebKit總結

Chromium的新logo Chromium是一個由Google主導開發的網頁浏覽器,它以BSD(Berkly Software Distribution)許可證等多重自由版權發行,并且開放源代碼。Chromium的開發可能早自2006年即開始,設計思想基于簡單、高速、穩定、安全等理念,在架構上使用了Apple發展出來的WebKit排版引擎、Safari的部份源代碼與Firefox的成果,并采用Google獨家開發出的V8引擎以提升解譯JavaScript的效率,而且設計了“沙盒”、“黑名單”、“無痕浏覽”等功能來實作穩定與安全的網頁浏覽環境。

Chromium是Google為發展自家的浏覽器Google Chrome而開啟的計劃,是以Chromium相當于Chrome的工程版或稱實驗版(盡管Chrome自身也有β版階段)。新功能會率先在Chromium上實作,待驗證後才會應用在Chrome上,故Chrome的功能會相對落後但較穩定。Chromium的更新速度很快,每隔數小時即有新的開發版本釋出,而且可以免安裝,下載下傳zip封裝版後解壓縮即可使用(Windows下也有安裝版)。Chrome雖然理論上也可以免安裝,但Google僅提供安裝版。 ================================================================ Chromium的官方網站是 http://www.chromium.org/ 編譯流程 編譯環境如下: OS:Windows7 IDE:Visual Studio 2010

主要參考: Building WebKit on Windows 7 with VS2010: http://blog.ashodnakashian.com/2012/01/building-webkit-on-windows-7-with-vs2010/ 其他可能有幫助的文章: VS2008編譯WebKit: http://blog.csdn.net/zxncvb/article/details/6925177 webkit編譯: http://blog.tianya.cn/blogger/post_read.asp?BlogID=3754033&PostID=35197859 基于VS2005的Webkit編譯: http://bbs.chinaunix.net/thread-3636362-1-1.html

我最初設想是依照Installing the Developer Tools( https://www.webkit.org/building/tools.html)中所說的流程編譯WebKit,這個官方指導上所指定的IDE是VS2005或Visual C++ 2005 Express Edition。本人按照這份指導認認真真一步一步地搭建環境,結果編譯一上來就碰到一個error,一時半會兒沒查找到滿意的解決方法。與此同時,我看到了那篇Ashod所撰寫的文章,事實上相比VS2005,本人更偏愛VS2010,于是乎我決定在Win7+VS2010的環境下編譯WebKit。至于Win7+VS2005的編譯過程我會單獨寫另一篇文章,留待更新。

Let's get started!

源代碼

Win7+VS2010編譯WebKit總結

WebKit Nightly Builds 本人選用的是2012年9月20日的WebKit-r128959。源代碼可以在WebKit Nightly Builds( http://nightly.webkit.org/)中下載下傳到,你要下載下傳的是第三個選項Source。

選好了源檔案版本之後,你就要開始搭建編譯環境了。這裡我要說一句,推薦大家在安裝以下軟體,尤其是SDK和SP的時候,盡量安裝在預設路徑,以免由于路徑問題引來不必要的麻煩,除非你對路徑設定很清楚。

安裝Cygwin Cygwin是許多自由軟體的集合,最初由Cygnus Solutions開發,用于各種版本的Microsoft Windows上,運作UNIX類系統。Cygwin的主要目的是通過重新編譯,将POSIX系統(例如Linux、BSD,以及其他Unix系統)上的軟體移植到Windows上。目前Cygwin由Red Hat等負責維護。

你可以從 http://svn.webkit.org/repository/webkit/trunk/Tools/CygwinDownloader/cygwin-downloader.zip( 2.8MB)下載下傳到Cygwin的下載下傳器。将這個zip解壓到一個檔案夾中,運作cygwin-downloader.exe。下載下傳過程可能較慢,如果感覺沒有下載下傳速度,可以關閉這個程式并重新運作,它會找到上一次的下載下傳點繼續下載下傳。下載下傳完畢後會自動運作setup.exe,安裝過程中要選擇“Install from Local Directory”。 預設安裝路徑:C:\cygwin\。

注意:下載下傳完成後,你可以把這個有setup.exe的檔案夾保留下來,這樣你在另一台電腦或虛拟機上編譯WebKit的時候就可以直接運作這個setup.exe了,省去了等待下載下傳的時間。

安裝VS2010相關

Win7+VS2010編譯WebKit總結

VS2010

Visual Studio 2010.

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)

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)

Visual C++ 2010 SP1 Compiler Update for the Windows SDK 7.1.(下載下傳頁面: http://www.microsoft.com/en-us/download/details.aspx?id=4422,下載下傳連結: http://download.microsoft.com/download/7/5/0/75040801-126C-4591-BCE4-4CD1FD1499AA/VC-Compiler-KB2519277.exe,檔案大小:121MB)

在第二項Windows SDK 7.1的網頁中,你要根據你的系統選擇合适的iso進行下載下傳: x86 GRMSDK_EN_DVD.iso x64 GRMSDKIAI_EN_DVD.iso Itanium GRMSDKX_EN_DVD.iso 我是32位的x86系統,是以安裝的是GRMSDK_EN_DVD.iso。

安裝相關SDK 按照Ashod博文中的說法是他并沒有安裝以下兩個SDK就可以成功編譯,但是我在編譯的時候就遇到了一個錯誤(這裡忘記了錯誤的準确描述,印象中有關d3dx9.dll),而這個錯誤就是因為缺少SDK,是以你在編譯的時候最好還是裝上這兩個SDK。

Win7+VS2010編譯WebKit總結

QuickTime

安裝QuickTime SDK(下載下傳頁面:http://developer.apple.com/quicktime/download/,下載下傳連結: http://adcdownload.apple.com/QuickTime/quicktime_7.3_sdk_for_windows/quicktimesdk.zip,檔案大小:2.02MB)

安裝DirectX SDK(下載下傳頁面:http://www.microsoft.com/downloads/en/details.aspx?displayhttp://download.microsoft.com/download/F/1/7/F178BCE4-FA19-428F-BB60-F3DEE1130BFA/DXSDK_Feb10.exe" rel="noopener noreferrer" target="_blank">http://download.microsoft.com/download/F/1/7/F178BCE4-FA19-428F-BB60-F3DEE1130BFA/DXSDK_Feb10.exe,檔案大小:554MB)

下載下傳這兩個SDK的過程中我遇到了不少麻煩。官方指導中并沒有直接給出這兩個SDK的下載下傳連結,QuickTime SDK還要注冊Apple ID,DirectX SDK要驗證Windows是否是正版。經過一番折騰我直接把下載下傳連結弄到了,貼在上面,應該能幫大家節約不少時間。

其他與環境相關的修改 我在編譯過程中遇到過這樣一個錯誤: C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(153,5): error MSB6001: Invalid command line switch for "CL.exe". Item has already been added. Key in dictionary: 'tmp'  Key being added: 'TMP'

這個錯誤的産生可能是由于Cygwin的TMP和TEMP環境變量會與Windows自己的TMP和TEMP環境變量沖突,是以我做了如下修改而且的确起作用了。 打開Cygwin\etc\profile檔案,将其中的unset TMP, TEMP這一行注釋掉,即在這行前面加上#。

注意:在修改前盡量備份一份profile檔案,因為用有些軟體修改profile檔案之後,運作Cygwin的時候會有錯誤,提示有關'\r'的資訊,這時你需要換一個軟體修改。

至此,編譯環境就算是搭建好了。接下來你要做的操作就是每次你選擇新的源檔案版本時都要進行的操作,這些操作都是在源檔案檔案夾中進行的。

================================================================

與源檔案檔案夾相關的修改 現在假設你的源代碼檔案夾名為WebKitSource。以我為例,我解壓源檔案壓縮包之後得到的檔案夾WebKit-r128959就相當于這裡的WebKitSource檔案夾。

  1. 将WebKitSupportLibrary.zip拷貝到WebKitSource\下。注意,不要解壓。
  2. 将vs2010-build-env.cmd拷貝到WebKitSource\下,修改其中set CYGWIN_SOURCE_DIR=C:\cygwin等号右邊的值,即你電腦中Cygwin的安裝目錄。另外,我将CYGWIN_DIR設定為C:\cygwin_dir,你可以根據自己的需要修改。
  3. 将pdenenv拷貝到WebKitSource\Tools\Scripts\下覆寫原版。
  4. 将WebKitSource\Source\WebCore\Modules\quota\中的檔案全部拷貝到WebKitSource\Source\WebCore\storage\中去。
  5. 用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(即讓它們失效)。

  6. 打開WebKitLibraries\win\tools\vsprops\common.props,修改TreatWarningAsError為false。
  7. 打開 Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def,删除
  8. 其中的“?nullptr@@[email protected]@@A”。
  9. 找到 WebKitSource\Source\WebCore\platform\network\curl\CookieJarCurl.cpp和 WebKitSource\Source\WebCore\platform\image-decoders\ImageDecoder.cpp,右鍵打開Properties菜單,選擇Configuration Properties>General,修改Item Tyep為C/C++ compiler。(10月9日後記:我嘗試找了一下這兩個源檔案竟然沒找到,我當初的确修改過,此問題留待修改)
  10. 打開WebCore\platform\LocalizedString.cpp,在264行和266行中有"Look Up “%@”"和"Look Up “<selection>”"注意%@和<selection>兩邊的雙引号是全角的,然後删除這些全角的引号即可。
  11. 打開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
  12. 在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%\Tools\Scripts和%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中的那個宏就屏蔽了比對檢測,進而避免了這個錯誤。

================================================================

開始編譯 如果這些操作都順利完成,你就可以輕按兩下 vs2010-build-env.cmd嘗試編譯了。在Cygwin指令行中你需要輸入:

  1. cpan HTTP::Date(這個操作可能隻在第一次編譯的時候要用到,事實上與環境相關)。
  2. update-webkit(這個操作每個源檔案檔案夾第一次編譯的時候要用到,下載下傳并安裝WebKitAuxiliaryLibrary.zip)。
  3. 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對于診斷并解決錯誤至關重要。

接下來,找本書看或者出去運動運動吧,編譯要花一到兩個小時,而且這段時間内你的電腦一直處于忙碌狀态,别煩它。編譯過程中還可能遇到一系列的錯誤,我在文章後面列出了各種錯誤的解決方法。

================================================================

運作WebKit 安裝Safari for Windows(http://appldnld.apple.com/Safari5/041-5487.20120509.INU8B/SafariSetup.exe )。

運作SetAppleAppSupportPath.reg,這個系統資料庫其實很簡單,會添加鍵HKEY_LOCAL_MACHINE\SOFTWARE\Apple Inc.\Apple Application Support并添加鍵值對"InstallDir"="C:\\Program Files\\Safari\\Apple Application Support"。這個路徑是運作MiniBrowser.exe或WinLaucher.exe時必不可少的。如果你的用的不是預設路徑,那麼你需要修改一下賦給 InstallDir的路徑值。

接下來,你就可以運作WebKitSource\WebKitBuild\Debug\bin\目錄下的MiniBrowser.exe或WinLaucher.exe了。個人感覺渲染網頁的速度很快,而下載下傳網頁的速度較慢,這一點可以通過對比MiniBrowser顯示線上網頁與本地網頁的速度很明顯地看出來。啰嗦句,當你要顯示本地網頁的時候記得在本地位址之前加上file:///,如file:///C:/HelloWorld.html。

Win7+VS2010編譯WebKit總結

MiniBrowser

Win7+VS2010編譯WebKit總結

WinLauncher

==========================================================

總結

WebKit更新非常頻繁,是以 到你編譯的時候, 前人的經驗很可能就不能解決全部問題了,這時就需要你去完善你的WebKit編譯流程了。以我為例,Ashod的博文(釋出于2012年1月29日)中所用的版本是WebKit-r106194,到我編譯的時候(2012年10月1日前後),他的這個版本就已經顯露出過時的樣子了。我曾嘗試編譯 WebKit-r 106194,但卻發現 在這個版本的腳本中,一些相關檔案的下載下傳位址後來都已經被新的位址取代了 。版本新舊交替,随之而來的問題無法避免,本文中的下載下傳連結也可能有一天會失效,希望屆時能由你來撰寫一篇WebKit編譯總結了!

在寫這篇文章的同時,我又進行了一次編譯,遇到了一個沒遇到過的錯誤,有關WebCore.lib中的一些無法解析的符号的錯誤。我認為這個錯誤是由于之前錯誤編譯的結果,于是删除了WebKitBuild檔案夾,重新進行了一次編譯,果然沒有再遇到這個錯誤。是以你一定要對編譯過程中産生的錯誤認真分析,總會找到問題所在。

編譯工程很辛苦,你會遇到各式各樣的問題,有些可能是前人遇到過的,有些則可能從網上根本找不到解決方法。無論是哪種情況,都要求你能夠沉得住氣,認真分析錯誤産生的原因,然後或者在網上查找解決方法,或者向高人求助(不要羞于或懶于與高人建立聯系,我就從與Ashod的聯系中獲得了很大的幫助),或者與周圍對編譯原理比較了解的人一起讨論解決方法。總之,堅持就是勝利!附上蒲松齡的自勉聯,與君共勉。

有志者、事竟成,破釜沉舟,百二秦關終屬楚; 苦心人、天不負,卧薪嘗膽,三千越甲可吞吳。

Win7+VS2010編譯WebKit總結

Success belongs to the persevering

最後,希望本文對大家編譯WebKit有所幫助,歡迎大家與我交流或提出寶貴意見,謝謝。

================================================================

各種錯誤的解決方法 錯誤: C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073: The command "REM Do not edit from the Visual Studio IDE! Customize via a MiniBrowserPreBuild.cmd file.

C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073: if not exist "C:\WebKit-r128959\Tools\MiniBrowser\MiniBrowserPreBuild.cmd" exit /b

解決方法:

這類MSB3073錯誤是由于之前有錯誤沒有成功解決。隻要你将前一個錯誤解決,這個錯誤就不會出現。是以,每次編譯過程中,你要做的就是解決第一個錯誤!

================================================================

錯誤: C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(153,5): error MSB6001:  Invalid command line switch for "CL.exe" . Item has already been added. Key in dictionary: 'tmp'  Key being added: ' TMP '

解決方法:

打開Cygwin\etc\profile檔案,将其中的unset TMP, TEMP這一行注釋掉,即在這行前面加上#。

================================================================

錯誤:fatal error C1083: Cannot open include file: 'unicode/uchar.h'

解決方法:執行一遍update-webit。

================================================================

錯誤:Can't locate HTTP/Date.pm in @INC

解決方法:Cygwin中執行cpan HTTP::Date。

================================================================

錯誤: ..\platform\LocalizedStrings.cpp : warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss

..\platform\LocalizedStrings.cpp(264): error C2001: newline in constant

..\platform\LocalizedStrings.cpp(266): error C2001: newline in constant

..\platform\LocalizedStrings.cpp(264): fatal error C1057: unexpected end of file in macro expansion

解決方法:

打開\platform\LocalizedStrings.cpp,在264行和266行中有Look Up “%@”和Look Up “<selection>”(注意%@和<selection>兩邊的雙引号是全角的),删除這些全角的引号即可。

================================================================

錯誤:c1xx : fatal error C1083: Cannot open source file: '..\storage\StorageInfo.cpp': No such file or directory

解決方法:将WebKitSource\Source\WebCore\Modules\quota\目錄中的檔案全部拷貝到WebKitSource\Source\WebCore\storage\中去。

================================================================

錯誤:gtest.lib(gtest.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in HostWindow.obj

解決方法:在TestWebKitAPI工程的config.h首部添加:#define _ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH。

================================================================

錯誤:我印象中有一個錯誤有關于某個檔案中的ENV{'VS80COMNTOOLS'}

解決方法:将VS80COMNTOOLS修改為VS100COMNTOOLS。

================================================================

錯誤: '"D:\Softwares\VS2010\Common7\Tools\\vsvars32.bat"' is not recognized as an internal or external command, operable program or batch file. 'devenv.com' is not recognized as an internal or external command, operable program or batch file.

解決方法:

将C:\Program Files\Microsoft Visual Studio 10.0\Common7\Tools\中的vsvars32.bat拷貝到你電腦系統變量VS100COMNTOOLS所訓示的那個路徑當中去。以為我為例,我将VS2010自定義安裝在了D:\Softwares\VS2010\中,VS100COMNTOOLS就是D:\Softwares\VS2010\Common7\Tools\。

================================================================

尚未解決的疑問 Ashod使用的是build-webkit --wincairo,但是這在我這裡遇到了一些問題。 首先,使用--wincairo這個指令行選項的話,需要下載下傳WinCairoRequirements.zip(http://dl.dropbox.com/u/39598926/WinCairoRequirements.zip),但是這個位址在國内被牆了。

于是,雖然我沒學過perl,但是還是嘗試讀了讀相關腳本,期望實作本地安裝。我發現build-webkit腳本中有: if (isGtk()) { ... } elsif (isAppleMacWebKit()) { … } elsif (isWinCairo()) {     (system("perl Tools/Scripts/update-webkit-wincairo-libs") == 0) or die; } elsif (isAppleWinWebKit()) {     (system("perl Tools/Scripts/update-webkit-support-libs") == 0) or die; } elsif (isQt()) { ... } 可見,build-webkit --wincairo實際上先調用了update-webkit-wincairo-libs,而這個腳本中又有: my $file = "WinCairoRequirements";

my $zipFile = "$file.zip";

my $winCairoLibsURL = "http://dl.dropbox.com/u/39598926/$zipFile";

my $command = "$FindBin::Bin/update-webkit-dependency";

system("perl", $command, $winCairoLibsURL, ".") == 0 or die;

也就是調用update-webkit-dependency下載下傳http://dl.dropbox.com/u/39598926/WinCairoRequirements.zip

腳本update-webkit-dependency中有: print "Checking Last-Modified date of $zipFile...\n"; my $result = system "curl -s -I -k --sslv3 $libsURL | grep Last-Modified > \"$tmpAbsDir/$file.headers\""; 這是用來擷取Last-Modified資訊以便判斷zip包是否過時的。

我使用“curl -s -I -k --sslv3  http://dl.dropbox.com/u/39598926/WinCairoRequirements.zip  -x 127.0.0.1:8087”來通過代理翻牆擷取文檔資訊,卻發現得到的結果竟然沒有Last-Modified字段。我還以為是因為我在國内的緣故,于是讓國外的同學也幫忙試一下,結果:

Win7+VS2010編譯WebKit總結

Missing Last-Modified 也是沒有Last-Modified字段,于是乎我暫時放棄了--wincairo。希望有人能夠在這個方面繼續做下去。

我也很希望能夠通過修改perl腳本實作WebKitAuxiliaryLibrary.zip(https://developer.apple.com/opensource/internet/WebKitAuxiliaryLibrary.zip)、WinCairoRequirements.zip的本地安裝,因為自己下載下傳這些包相對來說速度更快也更友善。

================================================================

現在的編譯隻能實作build-webkit --debug,而且#define _ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH隻是暫時屏蔽了比對檢測。接下來還要研究如何實作release版本的編譯。

最初的編譯目的是實作WebKit在VS2010下的斷點調試,繼續編譯将繼續進行。

================================================================

繼續閱讀