WebKit編譯小結

來源:互聯網
上載者:User

 

WebKit編譯小結

 

在Windows平台上利用微軟的VS編譯WebKit,然後在VS IDE裡設定斷點跟蹤WebKit的運行,是一件很好玩的事情。到目前為止,我們至少可以通過兩個開源項目來做這件事情:Apple的WebKit開源項目(http://webkit.org)和Google的Chromium開源項目(http://code.google.com/chromium)。前者我一共編譯過3次,每次都要磕磕絆絆,相比而言後者的編譯過程要順利得多。

 

所以針對Safari的WebKit自己寫個小結,希望下次再編譯時間能快點。

 

網上已經有很多先烈——先人?也不合適,還是前人吧——指明了一條最容易犯的錯誤:千萬別自作聰明,要嚴格按照官方指導,從安裝編譯工具開始(http://webkit.org/building/tools.html),亦步亦趨的來,不然到了出錯時再反過來找錯誤的原因就比較頭疼了。

 

所以還是按照官方指導的順序來說吧。

 

 

Installing the Developer Tools 安裝編譯工具 

   - http://webkit.org/building/tools.html

 

1. 微軟有免費(不是試用)的Visual Studio 2005 Express Edition可以下載使用,注意指導上說了新版本尚不支援。我有個朋友一開始就跳過了這一步(他用了顯然是盜版的VS 2008並且還自鳴得意可以少花點時間),最後不但人崩潰了,機器也崩潰了。另外網上也有不少攻略會告訴你,VS 2008也能編譯,但對於具體怎麼配置似乎語焉不詳,況且你不希望好不容易編譯過了調試又崩潰了吧?

 

2. 官指(官方指導)上提到的Windows補丁,以及Service Pack,Security Update,都需要老老實實安裝。安裝Platform SDK時還得跳到微軟的官網去看How-to,包括VS IDE的環境配置,煩人得很...這裡需要注意一下,最好全都使用預設的安裝目錄,否則編譯時間找不到這個標頭檔那個庫檔案很頭疼,當然如果對VS開發環境比較熟悉倒也不是什麼大問題。

 

3. 關於Cygwin組件。蘋果利用了Cygwin中的一些指令碼和工具去調用VS來編譯WebKit,理論上你完全可以直接在VS IED裡開啟WebKit的工程檔案來編譯之,前提是你曾經用VS開發過一些大型工程。在這一步常出的錯誤在於Cygwin中各個組件的版本。幾年前第一次編譯時間由於自己機器上已經安裝了Cygwin,就自作聰明的跳過了這一步,導致一些莫名的編譯錯誤。官指中的cygwin-downloader.zip其實已經指定了編譯所需要的組件的最小集合,老老實實的安照要求先下載最新版本到本地然後選擇本地安裝即可。

 

4. QuickTime SDK也是必須的,誰讓它是Apple的呢。我也曾自作聰明跳過了這一步,然後在安裝時又自訂了目錄...DirectX SDK也是必須的,Windows版本的WebKit畫圖時需要用到它的一些標頭檔和庫。

 

5. 終於有一個不是必須的了:WinDbg和NTSD

 

這一部分最花時間的是Visual Studio和Windows SDK和DirectX SDK的下載,好像一共有3-4G——其實也就相當於一部半高清的電影。

 

 

Getting WebKit 下載源碼

  - http://webkit.org/building/checkout.html

 

1. 這一步問題不大,選擇的餘地不小。你可以

a. 在Cygwin環境下通過SVN來檢出(check out)完整的代碼

b. 下載這個完整包:http://nightly.webkit.org/files/WebKit-SVN-source.tar.bz2。早先的時候只有200多M,現在急劇增長到了800M,其實代碼檔案基本沒變化,多出來的都是些測試和bug fix相關的檔案。

c. 還有一種最快捷的辦法:僅下載源檔案包,大概只有10幾M,缺點是源檔案裡不帶SVN資訊,所以是沒法進行漸進式SVN代碼更新和編譯的。在這裡:http://nightly.webkit.org/builds/trunk/src/1 或通過 WebKit Nightly Builds (http://nightly.webkit.org/) -> Source #View all available builds.

 

2. 安裝WebKit Support Libraries,這是Apple先行編譯好的一套Windows上的動態庫,包括基礎/網路/圖形庫等,只需按照官方指導上所說的,下載後存放到WebKit源碼的根目錄下,然後在Cygwin環境下運行update-webkit來下載更新最新的標頭檔和庫檔案即可。如果下一步編譯時間提示某個標頭檔或庫檔案有錯,可以先到WebKit Support Libraries這個目錄下看看是否屬於這裡,如果是的話或許可以通過升級到最新版本來解決這類編譯問題。

 

注意update-webkit這個指令碼還可能會替你更新代碼,如果你使用的代碼裡帶有SVN資訊的話。

 

 

Building WebKit 編譯

  - http://webkit.org/building/build.html

 

完成了以上步驟,至少半天就過去了,但很可能你才走出了第一步,因為運氣不好的話,後邊還會有一堆的編譯錯誤在等著你。

 

如果運氣足夠好,只要在Cygwin環境下通過build-webkit指令碼就可以得到編譯結果。常見的錯誤包括但不限於:

 

1. 找不到一些標頭檔或庫檔案

    - 首先通過檔案名稱猜測或是網上搜尋一下,看看這個檔案大概完成什麼功能,屬於哪部分(例如是Windows SDK還是Apple自己提供的基礎庫),只要知道它應屬的位置甚至目錄名,就不難解決問題了:要麼重新下載正確的版本,要麼在VS IDE裡設定正確的包含路徑,或者Windows環境變數

 

2. 提示註冊表裡找不到某個key

    - 可能是對應的SDK或庫檔案沒有正確安裝

 

3. 看不太明白的錯誤...  其實編譯錯誤資訊在這裡: .../WebKit/WebKitBuild/buildfailed 這個檔案裡說明了最近一次編譯錯誤的模組名project,然後到以下對應的檔案可以查看更具體的錯誤: .../WebKit/WebKitBuild/obj/<project>/Debug/BuildLog.htm

 

5. 最後記住一點,不管出什麼錯,都不要懷疑代碼本身;錯誤都是由編譯環境和你自己導致的。

 

 

如果你看到以下提示,恭喜你,任務完成了。

 

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

 WebKit is now built (56m:16s).

 To run Safari with this newly-built code, use the

 "WebKit/WebKitTools/Scripts/run-safari" script.

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

 

 

Running WebKit 運行

 

早先的時候直接執行 WebKit/WebKitTools/Scripts/debug-safari 就能啟動VS IDE,後者會自動找到並啟動Safari Shell,同時載入你先前編譯好的各種庫檔案。

 

但在最新版本中這個命令好像僅僅啟動了VS IDE,那就自己通過 WebKit/WebKitBuild/bin 目錄下自己編譯出來的 Safari.exe 來啟動Safari吧,然後在VS IDE裡attach process就可以設定斷點跟蹤調試了。

 

 

 

 

 

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

 

 

題外話:第一次編譯WebKit的時候,我受了某位WebKit開源貢獻者(source contributor)的影響,認為Apple這個公司不太地道,既然都開源了為什麼還很小氣的設了很多人為的障礙來搗亂,要知道有多少同學衝著WebKit的名聲滿腔熱血的衝上來,最後被這一個又一個挫折擊退了。後來自己也經曆過一次WebKit開源,也寫了step by step的編譯步驟,才明白這個一個複雜的系統,其依賴的庫和編譯環境,甚至編譯工具,也都是在動態變化的;最重要的是,有些內容你(包括Apple)並不希望開源——或許這是導致編譯步驟加倍複雜的根本原因——這也是我提到的那位開源貢獻者對Apple WebKit開發組“不爽”之處。

 

2010/12/30 補記:有人問為什麼要編譯WebKit?我想可能因為:

1. WebKit現在頗為流行

2. 好玩

3. 學習

4. 最重要的,如果你有基於WebKit的開發或移植工作,那麼在VS IDE裡跟蹤調試最新的WebKit代碼絕對是一件事半功倍的事情

 

為什麼基於Safari調試?因為Safari的debug模式內建了很多開發功能,包括查看每個頁面元素的具體資訊(例如布局和事件監聽Event Listener等),JavaScript調試等。當然,Google的Chrome也有相應的功能。嚴格來講,如果你專註於WebCore引擎本身,那麼使用哪個Browser Shell其實關係不大;如果你更關注狹義上的WebKit,也就是平台相關的部分,那麼Chrome可能是更好的選擇,因為它完全開源。至於Qt,如果你的工作與它完全無關,最好還是繞開它吧...

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.