webkit的編譯(r76498)

honwsn發表於2011-02-21

最近在xp上成功編譯了webkit,查閱很多文件,發現網上的文件介紹編譯方法所對應得webkit版本過於沉舊。這裡介紹的原始碼版本是 ,是2011年1月24號編譯的。編譯過程不是複雜,只要參考 其中的working code 一步一步的來。不會有太大的問題,當然還需要些補充,下面就介紹的。(也許是原始碼版本更新的緣故,現在的官方網址上面的編譯指南還是很有效的。)

[@more@]

編譯前的準備工作是搭建編譯環境,安裝工具

1.安裝vs2005 team suite (我用的是英文版),接著是安裝sp1, 然後依次安裝四個補丁包,注意次序, 。

2.下載。解壓後,執行cygwin-downloader.exe,這會下載118檔案到同級目錄的release資料夾中,(若網速慢,需要一段時間的)還有些cygywin的安裝程式setup.exe。下載完成後,執行setup.exe,選擇 install from local directory,選中cygwin-downloader.exe所載目錄,點選下一步安裝完成。

3.安裝quicktime sdk :http://developer.apple.com/quicktime/download/要到註冊個開發者賬號後下載,緣由是蘋果沒有向大眾開放自己的sdk。

4.安裝directx ,,之前沒有安裝結果編譯不過,所以必須安裝。頁面渲染加速的需要。

下面的工作是獲取原始碼。:

1.這裡我下載的原始碼版本是 . 有16M大小。解壓到F:/WebKitsrc下(也可以是其他目錄)。

2.下載WebKit Support LibrariesF:WebKitsrc下(與webkit解壓到同級目錄)

3.Update source tree.開啟cygwin shell,進入F:/WebKitsrc/Tools/Scripts目錄下(一般是掛載到/cygdrive/f/webkitsrc/Tools/Scripts目錄下)執行./update-webkit指令碼。

4.執行./build-webkit -debug,編譯debugwebkit庫。

以上步驟進行後,發現編譯通不過,此時開啟F:/WebKitsrc/Source/WebKit/win/WebKit.vcproj,修改其中每個工程的屬性,將c/c++編譯選項中的,設定”Treat Warnings As Errors”為”No”。聽說這是由quicktime sdk標頭檔案編碼問題。此步完成後,在執行第4步即可。

編譯成功後,生成的核心檔案有WebKit.dll,JavaScriptCore.dll,QTMovieWin.dll,InjectedBundle.dll,WebKit.exe,MiniBrowser.exe

如何除錯所生成的webkit庫呢?

此時我們雙擊執行MiniBrowser.exe,會提醒說缺少CFNetwork.dll等。

我們下載的是蘋果的webkit版本,執行需要依賴於mac平臺的一些庫和其他一些開源庫,如AVFoundationCF.dll,CFNetwork.dll,CoreAudioToolbox.dll,Foundation.dll,objc.dll,SQLite3.dll,zlib1.dll等。

所以我們需要下載win32版safari,安裝完畢後,將C:/Program Files/Common Files/Apple/Apple Application Support下的所有dll檔案除了WebKit.dll和JavaScriptCore.dll(這要用到我們自己編譯好的庫),到F:/WebKitsrc/WebKitBuild/Debug/bin目錄下。此時MiniBrowser.exe就可以執行了,我們就可以MiniBrowser.exe為宿主程式除錯webkit.dll和JavaScriptCore.dll了,瞭解頁面的DOM樹生成,排版和渲染的過程了。當然先要掌握具體的HTML/CSS規範。

忘了說明,還需設定以下環境變數:

WEBKITLIBRARIESDIR=F:/webkitsrc/WebKit/Libraries/win這個目錄是前面所提到的WebKit Support Libraries自動被解壓所生成的目錄。WEBKITOUTPUTDIR=F:/webkitsrc/WebKitBuild這個是編譯的輸出目錄。

我們是用cyngwin的bash指令碼,這些指令碼會為每個參與編譯的工程,生成一箇中間的bat檔案,然後呼叫cmd.exe,執行這個bat檔案,其中呼叫的vs2005編譯器。從工程的buildlog中,可以看到這些行為。

後記:

後來單獨更新了WebKitSupportLibrary.zip,wekit編譯成功但執行./run-safari --debug時,得到了如下結果:

“you copy of safari is missing important software resouces please install safari”
“無法定位程式輸入點****與動態連結庫*****(如icuuc40.dll)上”

仔細看了WebKitSupportLibrary.zip 中的內容都是這些關鍵庫的標頭檔案和lib,這說明了這些庫與safari安裝目錄下的apple Application support庫不相容
(“C:/Program Files/Common Files/Apple/Apple Application Support”),不是太新了,就是太老了。
回覆到之前成功編譯時用的WebKitSupportLibrary.zip。重新編譯safari就成功被啟動了。
這說明大家編譯成功後,應該儲存當時的編譯包等資料。safari更新並不能與WebKitSupportLibrary.zip保持一致。
除此之外估計全用最新的包也可能會避免這類問題。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23410886/viewspace-1046300/,如需轉載,請註明出處,否則將追究法律責任。

相關文章