在windows下編譯chromium

最近自己的成長目標想從模塊設計轉到系統架構上,剛好大組有個瀏覽器調研的任務,而chromium又是google開源的瀏覽器,所以開始對它進行了一些前期研究。這個過程十分不容易,我對windows下的開發環境瞭解得太少,光是編譯就花了我很大的工夫,我把這裏邊遇到的問題記錄下來。


開發環境:

windows7專業版,sp1

vs2013        我不想自己折騰自己,把原來的vs刪了,裝上編譯要求的。

安裝編譯環境

windows 7.1 sdk 

http://www.microsoft.com/en-us/download/details.aspx?id=8279

windows sdk 8

http://msdn.microsoft.com/en-us/windows/hardware/hh852363.aspx

June 2010 DirectX SDK

http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=6812

如果安裝過程中出現錯誤S1023

把Microsoft Visual C++ 2010 Redistributable刪掉就可以了,我把x86和x64的都刪了。

Windows Driver Kit 7.1.

http://www.microsoft.com/en-us/download/details.aspx?id=1


所有的這些我都是裝在默認路徑下,以避免需要更改路徑的配置,最大限度避免由於路徑導致的問題。

我在系統配置項中加了以下的配置項,我看了很多網上的攻略,我最後也不知道哪些配置項是有用的了。

新建DXSDK_DIR:C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\

Path新加(在原有的上增加的,請不要把原有的覆蓋掉)

D:\chrome\depot_tools\depot_tools   安裝depot_tools的目錄

新建WDK_DIR:C:\WinDDK\7600.16385.1  Windows Driver Kit 7.1.安裝目錄


1、下載depot_tools

https://src.chromium.org/svn/trunk/tools/depot_tools.zip,解壓就可以用。

注意按上文提到的在path中增加解壓目錄。

2、連接外網的需要,在進行下載編譯時,可能需要連接code.google.com,這個被防火牆屏蔽了。

cmd命令窗口我不知道怎麼設置使用代理,我直接用的vpn,叫NydusVpn,可以免費用一天,如果只是下載代碼的話足夠了,但是不排除以後要有什麼更新的要求。如果大家能直接連外網,這一步忽略。

3、下載代碼,建立一個空文件夾。如D:\chrome_new

在http://src.chromium.org/svn/releases/選一個你需要編譯的版本,我不確定每個版本是否可以編譯,通常選當前瀏覽器對應的版本應該是可以的,我按網上選的是36.0.1929.1

使用cmd進入D:\chrome_new

C:\Users\lenovo>d:

D:\>cd chrome_new

gclient config http://src.chromium.org/svn/releases/36.0.1929.1

等待命令完成。

正式下載

gclient sync --force  這個過程很慢,我等了可能一晚上

5、修改配置,這些配置我也是根據錯誤改的,我不併確定對每個人是否有用。

src\build\common.gypi

(1)查找msvs_disabled_warnings,找到

'msvs_disabled_warnings': [4351, 4355, 4396, 4503, 4819,

# TODO(maruel): These warnings are level 4. They will be slowly

# removed as code is fixed.

4100, 4121, 4125, 4127, 4130, 4131, 4189, 4201, 4238, 4244, 4245,

4310, 4428, 4481, 4505, 4510, 4512, 4530, 4610, 4611, 4701, 4702,

4706,4067,4996,4800,4251,4702,4819,

],

最後這幾個數字沒有的加上,因爲編譯的時候把可能把warning當成錯誤導致編譯不過。

(2)查找msvs_cygwin_shell,修改爲

'msvs_cygwin_shell': 1,

解決 generate_stubs.py : error : No inputs specified問題

(3)查找到msvs_cygwin_shell位置,在下邊增加一行。

'msvs_cygwin_dirs': ['<(DEPTH)/third_party/cygwin'],

解決src\third_party\ffmpeg\.\setup_env.bat 不是內部或外部命令,也不是可運行的程序 的問題


6、生成可編譯代碼,在src目錄下運行

set DEPOT_TOOLS_WIN_TOOLCHAIN=1
set GYP_MSVS_VERSION=2013 
set GYP_GENERATORS=msvs-ninja,ninja
set GYP_DEFINES=component=shared_library
gclient runhooks


注意你的vs是 Visual Studio 2013還是Visual Studio 2013 Express
如果是Visual Studio 2013 Express,按官方的要求需要修改
set GYP_MSVS_VERSION=2013e

DEPOT_TOOLS_WIN_TOOLCHAIN我設置的是1,我目前還不知道0和1的區別。
GYP_GENERATORS,我多次嘗試直接使用vs2013編譯源代碼,但是都無法成功,所以我最後還是用了ninja
所以配置在這裏是msvs-ninja,ninja

7、ninja -C out\Debug chrome
我的筆記本很慢,這個命令又花了一晚上執行,到最後報了個錯,讓我很崩潰。錯誤是
[16593/16612] ACTION chrome_dll: hardl...utput_fbcf16b8da7e1fad199557357c2ac58f
FAILED: D:\chrome\depot_tools\depot_tools\python276_bin\python.exe gyp-win-tool
action-wrapper environment.x86 chrome_dll_target_hardlink_pdb_to_output_fbcf16b8
da7e1fad199557357c2ac58f..rsp
系統找不到指定的路徑。
當文件已存在時,無法創建該文件。
系統找不到指定的文件。
已複製         0 個文件。
[16593/16612] ACTION chrome_dll: hardl...utput_fbcf16b8da7e1fad199557357c2ac58f
ninja: build stopped: subcommand failed.

這個錯誤有可能跟我多次編譯沒有成功有關。我的解決辦法是:

打開src\out\Debug,找到chrome_dll_target_hardlink_pdb_to_output_fbcf16b8da7e1fad199557357c2ac58f..rsp文件

用記事本打開,最後兩個參數是兩個路徑

 '../out/Debug/initial/chrome.dll.pdb' '../out/Debug/chrome.dll.pdb'"

在out/Debug目錄下刪掉文件out/Debug/chrome.dll.pdb

再次執行ninja -C out\Debug chrome就能夠編譯過了。


到此編譯任務完成,行成的程序在src\out\Debug\chrome.exe

此文由本人回憶整理,如果有疏漏,請見諒。



發佈了22 篇原創文章 · 獲贊 3 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章