UPDATED 20140118:WebKit已經(jīng)支持使用VS2013來編譯啦!因此,如果使用VS2010來編譯最新的WebKit代碼會出現(xiàn)問題。還沒有安裝VS2013,但是,感覺只需將安裝VS2010的步驟更改為安裝2013就可以完成編譯WebKit了。另外,這里用VS2010編譯WebKit所遇到的問題應該還是有幫助的。
一直有想編譯WebKit的想法,可以一直都沒有具體實施。最近,終于將WebKit給編譯通過了!雖然,只是編譯通過,只是學習WebKit開始的一小步,但是,感覺還是很爽的!
印象中,感覺在Windows下編譯WebKit是很繁瑣復雜的。但是,在這次成功編譯WebKit的過程中發(fā)現(xiàn),只要相關(guān)工具安裝在“默認”的路徑上,成功編譯WebKit還是相對簡單容易的。只需要按照WebKit官方網(wǎng)站的文檔,就可以輕松編譯WebKit了(當然,還是會碰到一些小問題)。
接下來,想根據(jù)這次編譯WebKit過程中所遇到問題的解決和總結(jié),說明一下編譯WebKit的步驟。
分為以下幾方面來講述:
我使用的是Windows 8操作系統(tǒng)。當然,如果使用Windows 7/Vista肯定也是沒有問題的。
下載并安裝June 2010 DirectX SDK。
為什么要將DirectX SDK的安裝放在第一步呢?因為,DirectX SDK的安裝與Visual Studio 2010 sp1有一個沖突:C++ Runtime版本沖突。為了避開這個問題,就將安裝DirectX SDK放在安裝Visual Studio之前。如果大家是先安裝Visual Studio 2010 sp1的,在碰到DirectX SDK不能成功安裝時,可以查看這篇文章:"S1023" error when you install the DirectX SDK (June 2010)(http://support.microsoft.com/kb/2728613),以解決問題。
另外,想說明一下,在Windows 8 SDK中,已經(jīng)包括了DirectX SDK。但是,因為,WebKit使用了一些最新的DirectX SDK沒有包括的部分,所以,還是需要安裝June 2010版本的DirectX SDK的。
1)安裝Visual Studio 2010或Visual Studio 2010 express。
2)安裝Visual Studio 2010 sp1。
需要特別說明的是,建議將VS安裝在默認路徑的C盤,否則,在編譯WebKit時會遇到問題。當時,我就是沒有將VS安裝在C盤,所以,撲騰了一下。當然,這不是必須的。如果VS不是安裝在C盤,可以查看“Visual Studio沒有安裝在默認的C盤引發(fā)的問題”部分,以解決問題。
1)下載Cygwin壓縮包。WebKit官方幫我們整理了一個包括WebKit所需工具的Cygwin壓縮包。使用這個壓縮包,就只會下載安裝WebKit所需要的工具集。
2)解壓并運行cygwin-downloader.exe,以下載Cygwin所需文件。
3)下載完后,運行setup.exe,安裝Cygwin。
有幾點說明一下:
a) “Choose A Download Source”,選擇“Install from Local Directory”。
b) “Select Root Install Directory”,強烈建議按照默認的“C:\Cygwin”,否則,在編譯WebKit時會遇到許多問題。當時,我就是沒有將Cygwin安裝在默認路 徑上,在編譯時遇到許多的問題。當然,這不是必須的。如果Cygwin不是安裝在默認路徑上,可以查看“Cygwin沒有安裝在默認路徑(C:\Cygwin)而引發(fā)的問題”部分,以解決問題。
1)下載并安裝QuickTime。
2)下載并安裝QuickTime SDK。留意右邊的“Downloads and Tools”部分,點擊該處以查找資源下載。
需要特別說明的是,建議將QuikTime SDK安裝在默認的C盤路徑上,否則,在編譯時會遇到問題。當然,這不是必須的。如果QuickTime SDK不是安裝在默認路徑上,可以查看“QuickTime SDK沒有安裝在默認的C盤而引發(fā)的問題”部分,以解決問題。
為了安裝Debugging Tools for Windows,我直接安裝了Windows 8 SDK。這個步驟不是必須的??梢缘鹊浇?jīng)后需要用到Debugging Tools for Windows時,才安裝。
至此,編譯WebKit所需的開發(fā)工具,已安裝完成了!
1)下載WebKit源代碼。運行cygwin終端,輸入以下命令,使用svn客戶端程序?qū)?/span>WebKit源代碼下載到本地(下載到用戶HOME目錄下的WebKit目錄)。
svn checkout https://svn.webkit.org/repository/webkit/trunk WebKit
2)下載WebKit所需的庫文件壓縮包。下載完后,不需要解壓,直接將其放到WebKit目錄下即可。
3)更新WebKit源代碼。運行Cygwin終端,進入WebKit目錄,輸入以下命令,以更新WebKit源代碼。注意,在編譯前,必須執(zhí)行這一步驟。因為,第一次運行該命令時,會下載一些編譯WebKit所需要的額外的庫文件。
./Tools/Scripts/update-webkit
至此,開發(fā)工具和源代碼都已經(jīng)就緒了,可以開始編譯WebKit了!
可以通過兩種方式編譯。
打開Cygwin終端,進入WebKit目錄,輸入以下命令,開始編譯WebKit(默認是release版本)。
./Tools/Scripts/build-webkit
或
./Tools/Scripts/build-webkit --debug
使用Visual Studio 2010打開解決方案WebKit/Source/WebKit/WebKit.vcxproj/WebKit.sln。直接編譯解決方案即可。
這兩種方式應該是類似的,如果配置正確,在某種方式下編譯成功,在另一種方式下也會編譯成功的。
在使用Cygwin命令行開始編譯后,發(fā)現(xiàn)編譯馬上就中斷了。然后,有以下的錯誤提示:
根據(jù)上面的提示,似乎是由于找不到VS程序而引發(fā)的出錯。我當時是將VS安裝在D盤的,沒有安裝在默認的C盤。另外,我安裝的是Visual Studio,沒有安裝Visual Studio Express,怎么去找VCExpress.exe呢?因此,根據(jù)錯誤提示,打開webkitdirs.pm文件,查看第1657行到底發(fā)生了什么。
發(fā)現(xiàn),由于programFilesPath函數(shù)的返回值,從而,錯誤的進入了else分支。那么,再看看programFilesPath函數(shù)。
發(fā)現(xiàn),其返回值是根據(jù)環(huán)境變量“PROGRAMFILES(X86)”等決定的。在我本機上輸出環(huán)境變量“PROGRAMFILES(X86)”,發(fā)現(xiàn)其值為“C:\Program Files (x86)”。結(jié)合上面的setupCygwinEnv函數(shù),可以確定就是因為programFilesPath值不對,導致了找不對VS程序,所以,最終走到了else分支??!
為了解決問題,我直接修改了上面的programFilesPath函數(shù),將賦值的那一行直接改為:
做了以上修改后,問題解決!
需要注意的是,如果VS安裝在默認的C盤,是不會有這個問題的。另外,如果是直接使用VS進行編譯,而不是使用Cygwin命令行編譯,應該也是不會有這個問題的。
如果Cygwin沒有安裝在C盤,而是安裝在D盤(D:\Cygwin)導致碰到許多編譯鏈接問題!絕大多數(shù)的編譯問題都是這個問題引起的!問題提示類似于這樣:
在我本機上輸出環(huán)境變量“SystemDrive”,發(fā)現(xiàn)其值為“C:”,而我的Cygwin是安裝在D盤的。這樣,相應命令當然是找不到的呀!
為了解決這個問題,可以通過以下方式處理。
1)使用Visual Studio 2010打開WebKit解決方案。
2)通過VS的Property Manager窗口,快速的批量的修改配置(通過Property Manager,可以做到只更改一處,多處起效。例如,修改某處的配置,使得debug和release配置都起作用!我一開始,沒有使用Property Manager修改配置,因此,會出現(xiàn)debug編譯通過,但是,release編譯不通過的問題)。
a) 通過菜單View->Other Windows->Property Manager打開Property Manager窗口。打開后,Property Manager面板顯示如下:
b) 定位到WTFGenerated項目,然后,依次展開,定位到common項。
c) 雙擊common項,打開對話框。左邊定位到NMake項,在右邊即可看到與錯誤信息相關(guān)的內(nèi)容了。
d) 依次對“Build Command Line”、“Rebuild All Commond Line”和“Clean Command Line”的內(nèi)容進行編輯,將兩處的Cygwin的安裝目錄路徑修正。以“Build Command Line”為例,修正前的內(nèi)容為:
修正后的內(nèi)容為:
3)通過VS,對WebKit解決方案進行對“%SystemDrive%\cygwin”的查找,并對相應之處進行替換。通過查找,發(fā)現(xiàn)共有19個cmd文件(都是一些項目編譯前處理和編譯后處理命令行文件)滿足條件,因此,需要對這19個.cmd文件的Cygwin目錄進行替換修正。
如果QuickTime SDK沒有安裝在默認路徑,會導致QTMovieWin項目編譯不過??赏ㄟ^下述方法解決問題。
1) 打開Property Manager窗口,并定位到QTMovieWin項目。
2) 在QTMovieWin項目里,定位到QTMovieWinCommon項。
3) 雙擊QTMoveWinCommon項,打開對話框。修改編譯配置的“Additional Include Directories”。將“$(ProgramFiles)/QuickTime SDK/includes”這一路徑修正為對應QuickTime SDK安裝目錄下的頭文件目錄。
4) 修改鏈接配置的“Additional Library Directories”。將“$(ProgramFiles)/QuickTime SDK\LIbraries”這一路徑修正為對應QuickTime SDK安裝目錄下的庫文件目錄。
編譯錯誤如下:
對應的出錯源文件為WebCore項目下platform目錄下的LocalizedStrings.cpp文件:
通過google發(fā)現(xiàn),是因為上述標出來的全角雙引號導致問題的。將這些全角雙引號直接替換為半角雙引號即可解決問題。
另外,具體為什么會有問題呢?我猜可能與WEB_UI_STRING等宏的實現(xiàn)相關(guān),這就需要進一步查看代碼來定位問題了。
至此,無論通過Cygwin還是VS,都應該可以順利編譯通過了!
運行Visual Studio 2010,打開WebKit解決方案,并將WinLauncher項目設(shè)置為啟動項目。按下F5,即可運行&調(diào)試WebKit!
至此,我們不但可以編譯WebKit,還可以運行、調(diào)試WebKit了!
1、WebKit官方的安裝開發(fā)工具文檔里,提到的Cygwin DLL的relocate操作,我并沒有去執(zhí)行。也不太清楚什么情況下,才必須執(zhí)行這個操作。我想可以以后遇到問題時,再看看是否要去執(zhí)行這個操作。
2、WebKit官方的安裝開發(fā)工具文檔里,提到的php的安裝(這個步驟原來的文檔里是沒有的,不知道什么情況文檔更新了這一塊內(nèi)容,2013年8月?2013年9月?)。我還沒有安裝,等以后需要時再安裝吧。
3、因為我使用的操作系統(tǒng)是Windows 8,所以,沒有去安裝WebKit官方的安裝開發(fā)工具文檔里提到的一些補丁。我想對于Windows 8來說是不是已經(jīng)不需要的呢。
4、WebKit官方支持的Visual Studio版本會不斷的升級。以前只支持Visual Studio 2005,現(xiàn)在支持Visual Studio 2010。但是,肯定不會去追最新的Visual Studio版本的。如果想使用最新的Visual Studio版本(例如,Visual Studio 2012)編譯最新的WebKit代碼,肯定是可行的,網(wǎng)上也有許多類似的文章(是不是關(guān)鍵在于WebKit的編譯腳本,可能需要進行一些修改?)。
http://www.microsoft.com/en-us/download/details.aspx?id=6812
http://svn.webkit.org/repository/webkit/trunk/Tools/CygwinDownloader/cygwin-downloader.zip
http://www.apple.com/cn/quicktime/download/
https://developer.apple.com/quicktime/
http://msdn.microsoft.com/en-US/windows/hardware/hh852363
https://developer.apple.com/opensource/internet/webkit_sptlib_agree.html
http://www.webkit.org/building/tools.html
http://www.webkit.org/building/checkout.html
http://www.webkit.org/building/build.html
http://www.webkit.org/building/run.html
http://www.webkit.org/building/debug.html
http://msdn.microsoft.com/en-us/library/ms173410(v=vs.90).aspx
聯(lián)系客服