2011年8月31日 星期三

Building Chromium Windows @ Windows 7 64Bit

為啥會需要編 Chromium 呢?一開始是工作需求,後來漸漸變成一種想把玩 Open Source 的心態去進行,即使下了班還是播出點時間研究研究。實在是 Web Browser 佔據的場景越來越多囉,如果手邊有一套自己可以亂改的 Browser 不亦樂乎?例如去年就有人拿 chromium 改成專門用於 facebook 的瀏覽器。雖然 Open Source 界不少人反微軟,但反過來看看 OS 市佔率,還是有太多太多人都在 Windows 上玩耍,如果想服務大眾或是做出合適於大眾把玩的東西,仍舊不能放棄 Windows 平台。


整個流程請參考:Build Instructions (Windows) 即可。在此使用 Windows 7 CHT 64Bit + VS2010 Express CHT 版,官方的簡介都是以 VS2008 Express 為基準或是 VS2008、VS2010 為主,所以參考官方的流程已足矣。另外一提的,連 Webkit 還都是以 VS2005 系列來說。


環境:


CPU:AMD 945 x4
RAM:DDR3-1333 2G x4
OS:Windows 7 CHT 64Bit


安裝軟體:


VISUAL C++ 2010 EXPRESS (VS2010ExpressCHT.iso)


Microsoft Visual Studio 2010 Service Pack 1 (VS2010SP1dvd1.iso)


DirectX SDK (June 2010 DirectX SDK)


Windows Driver Kit Version 7.1.0


cygwin


Chromium depot_tools


設定:



  1. 先取得程式碼,在此使用打包好的 http://chromium-browser-source.commondatastorage.googleapis.com/chromium_tarball.html ,此為 chromium.r96198.tgz 版本

  2. 接著打開 cgywin 並且把 chromium.r96198.tgz 擺在家目錄,用 tar -xvf chromium.r96198.tgz 解開,大概要 1x 分鐘,最後把 chromium 移到家目錄

  3. 切換至 ~/chromium/src 執行

    • $ set GYP_MSVS_VERSION=2010e

    • $ gclient sync --force

    • $ GYP_DEFINES='disable_nacl=1' gclient runhooks



  4. 打開 ~/chromium/src/chrome/chrome.sln 並將 chrome 設成起始專案

  5. 設定額外 include 與 lib 資訊

    • 開啟 chrome.sln 並點選 chrome project 後,[檢視] -> [屬性管理員] -> 點選 Microsoft.Cpp.Win32.user 後,去 [VC++ 目錄] 新增 [include 目錄] 和 [程式庫目錄]的資訊



  6. 可以點 chrome project 後,按 F7 編譯了。在我這台電腦大概一開始要跑快兩小時,修一修後再跑一小時,最後才編出 chrome.exe


microsoft.Cpp.Win32.user 


chrome_vc2010_express_lib chrome_vc2010_express_include


錯誤訊息及解決方式:


問題一:


官方說可以用 C:\trunk\src\chrome> devenv.exe /build Debug chrome.sln /project chrome.vcproj 這種 cmd line 編法,但一直找不到 devenv.exe 擺在哪


解法:


對 VS2008 Express 改用 vcbuild.exe ,位置在 C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcpackages\vcbuild.exe ,且使用時得改成 vcbuild.exe /upgrade ,這樣也會開始編譯。但我還是不知道 VC++ 2010 Express 該用哪支,最後還是用開始 chrome.sln 用介面編吧


問題二:


------ 已開始建置: 專案: ppapi_cpp_objects_nacl, 組態: Debug Win32 ------
2>  graphics_3d_dev.cc
2>  video_capture_client_dev.cc
2>  file_chooser_dev.cc
2>  scrollbar_dev.cc
2>..\..\..\..\ppapi\cpp\dev\video_capture_client_dev.cc(30): error C2440: '<function-style-cast>' : 無法由 'const PP_Resource' 轉換為 'pp::Buffer_Dev'
2>          沒有可以取得來源型別的建構函式,或建構函式多載解析模稜兩可
2>  video_decoder_dev.cc
2>..\..\..\..\ppapi\cpp\dev\graphics_3d_dev.cc(28): error C2511: 'pp::Graphics3D_Dev::Graphics3D_Dev(const pp::Instance &,const pp::Graphics3D_Dev &,const int32_t *)' : 在 'pp::Graphics3D_Dev' 找不到多載成員函式
2>          C:\cygwin\home\changyy\chromium\src\native_client\src\third_party\ppapi/cpp/dev/graphics_3d_dev.h(17) : 請參閱 'pp::Graphics3D_Dev' 的宣告
2>..\..\..\..\ppapi\cpp\dev\graphics_3d_dev.cc(58): error C2039: 'ResizeBuffers' : 不是 'pp::Graphics3D_Dev' 的成員
2>          C:\cygwin\home\changyy\chromium\src\native_client\src\third_party\ppapi/cpp/dev/graphics_3d_dev.h(17) : 請參閱 'pp::Graphics3D_Dev' 的宣告
2>..\..\..\..\ppapi\cpp\dev\graphics_3d_dev.cc(62): error C2039: 'ResizeBuffers' : 不是 'PPB_Graphics3D_Dev' 的成員
2>          C:\cygwin\home\changyy\chromium\src\native_client\src\third_party\ppapi/c/dev/ppb_graphics_3d_dev.h(37) : 請參閱 'PPB_Graphics3D_Dev' 的宣告
2>..\..\..\..\ppapi\cpp\dev\graphics_3d_dev.cc(63): error C3861: 'pp_resource': 找不到識別項
... 


解法:


把這東西給關掉 XD 在 cygwin 底下,切換到 ~/chromium/src 後,執行 $ GYP_DEFINES='disable_nacl=1' gclient runhooks 後,再去重編即可。


問題三:


108>C:\WinDDK\7600.16385.1\inc\mfc42\atldef.h(4) : fatal error C1083: Cannot open include file: '..\atl30\atldef.h': No such file or directory


解法:


安裝的 WDD 中,只有 atl71 目錄而沒有 atl30,所以就是直接把 atl71 複製一份並更名為 atl30。


問題四:


fatal error: 90>libGLESv2\libGLESv2.rc(10): fatal error RC1015: cannot open include file 'afxres.h'.


解法:


將 include 資訊多加個 WDD/path/inc/mfc42 吧


其他: 


編完沒過怎辦?繼續編 XD 重複幾次會發現沒過的會減少 :P


其他參考資料:



1 則留言:

  1. 你好, 想請問關於build chromium project的問題, 我每次執行"ninja -C out\Debug chrome"都會有編碼導致fail的問題, 沒看你有打這行指令, 請問你如何產生sln檔的?

    回覆刪除