1. 程式人生 > >ubuntu14.04編譯WebKit原始碼

ubuntu14.04編譯WebKit原始碼

  由於自己研究生的方向和瀏覽器多屏互動,分散式計算相關,所以在學習WebKit的時候,自己編譯了WebKit的原始碼,希望能夠增強學習的興趣。搗鼓了好幾天,最後總算是編譯成功了,這裡做下總結,既可以方便自己,又可以作為以後團隊的技術庫,也作為分享給WebKit的愛好者。

  一. 編譯環境

  1. 我使用的是ubuntu14.04作業系統,虛擬機器。

  二. 原始碼的獲取

  1. 從http://nightly.webkit.org/上下載原始碼,我下載的版本是r174650。下面的編譯也是以此版本為例子,不同的版本編譯方法略有些差別,特別是很早以前的版本,跟最新版本的目錄都不一樣。

  三. 準備工作

  1. 熟悉linux的基本命令。

  2. 解壓下載好的原始碼 ,並從終端進入原始碼目錄。

  3. 開啟網頁http://trac.webkit.org/wiki/BuildingGtk,這裡面有教程如何編譯WebKit。但在這之前前,可能需要安裝一些WebKit編譯和執行的一些基礎庫,而ubuntu(其他linux也一樣)沒有自帶這些庫,所以庫的安裝是一個很麻煩的事情。我自己在安裝庫的時候大多數是網上搜索的,複製貼上了很多,具體需要哪些庫我也不是很記得。這裡我也不打算列舉出來所需要哪些庫檔案,不同版本所需的庫檔案也不一樣,我在這裡說一下在安裝庫之前的一些準備工作:

  首先,安裝gcc和g++,還有vim這三個基本的工具

  接著,根據網頁的教程第一個步驟,執行Tools/gtk/install-dependencies(我感覺應該是安裝一些和GTK相關的庫)

  然後,執行sudo apt-get install build-essential(前提是安裝了gcc)來安裝一些gcc的庫函式

  最後,執行網頁上的第二個步驟,執行Tools/Scripts/update-webkitgtk-libs(具體幹嘛的我也不清楚,你也可以試試不安裝會發生什麼,我是沒試過,不過最好安裝吧)

  先到這,這裡僅僅是做了準備工作,解決了一些WebKit依賴庫,但是大多數WebKit所需要的庫我們還沒安裝,下面會再介紹。

 四. 開始編譯

  現在開始最重要的編譯階段了,如前所訴,WebKit的依賴庫還沒安裝好,但是庫那麼多,又不知道從何下手。解決方法如下:

  執行網頁教程的第三個步驟:Tools/Scripts/build-webkit --gtk的時候,終端會有很多輸出,最前面的輸出就是check你是否安裝了需要的庫!這樣就可以解決問題了,只要你好好閱讀輸出的資訊,那麼就可以找到自己需要哪些庫了。在這之前,建議先上網搜尋一下“ubuntu編譯WebKit”,根據其他人安裝的庫先安裝一些庫,那些庫基本都有幫助,直接複製命令列就可以了。然後再執行Tools/Scripts/build-webkit --gtk檢視還缺哪些庫,我就是這麼解決庫的問題的。

  有一個問題需要注意的就是,執行Tools/Scripts/build-webkit --gtk的時候,可能關於庫的資訊很快就被後面編譯的資訊掩蓋過去了,所以你可以使用重定向輸出,儲存下與庫相關的一些資訊,比如執行Tools/Scripts/build-webkit --gtk>out.txt,過一會兒使用ctrl+c命令強制停止程序,然後使用vim out.txt開啟檔案,檢視庫安裝與否的資訊(最好看明白庫是否齊全後再編譯,不然半路出錯就不太好了,因為編譯大概要花5個小時的時間!)

付上我重定向輸出的庫資訊圖片,可以看到關於庫的資訊和完整,比如Found BISON就明找到了bison庫,也有相應的版本要求。


 五. 編譯遇到的問題

  以上還僅僅只是噩夢的開始,我在完成上述的過程後,以為可以編譯成功了,但是編譯到一半的時候總是會出現標頭檔案缺失的錯誤,就是經常找不到標頭檔案,為此我以為原始碼有誤,又下了好幾個版本,都有同樣的錯誤,後來google後才找到了解決方法,如下:

  首先,你需要注意一個問題,就是在解壓後的原始碼目錄中,是沒有WebKitBulid這個目錄的,它是在你執行Tools/Scripts/build-webkit --gtk的時候產生的(當然或者可能在執行網頁的步驟一或者步驟二產生的,這個具體我沒關注)。

  接著,關鍵問題是,那些確實的標頭檔案其實是在編譯的過程中產生在WebKitBuild中,而原始碼中的原始檔不知什麼原因沒有正確的連線到WebKitBuild中的標頭檔案,導致找不到標頭檔案錯誤。

  所以,你可以使用find 命令來查詢丟失的標頭檔案(報錯的時候會具體說明哪個.cpp檔案缺失哪個.h檔案),首先用終端進入最開始的目錄,用find -name xxx.cpp(xxx代表原始檔的檔名)來找到原始檔的目錄,再同理找到標頭檔案所在的目錄,然後把標頭檔案copy到原始檔所在的目錄。然後接著編譯,如果發現問題,就繼續這個步驟,直到成功為止。

 六. 執行

   執行命令 Tools/Scripts/run-launcher --gtk就可以運行了。

  我遇到的主要問題就是標頭檔案缺失的問題,這裡也主要說明了如何解決標頭檔案缺失這個問題。下面我附上一張我執行WebKit的圖片(蠻挫的- -!),祝大家好運!編譯成功!