轉自http://blog.csdn.net/zhuhongshu/article/details/54193842
準備
- 快速穩定的VPN(非常重要,免費的VPN不靠譜,最好花錢買個VPN或者公司有穩定的翻牆)
- Win7或者更新的系統,必須64位
- VS2013 Update4(編譯不同版本要求不一樣,具體看Cef官網幫助,我用的是VS2013 Update5)
- Win10 SDK
- 60G剩餘空間(用SSD最好,編譯速度很依賴CPU和硬盤)
- 下載Python並添加到Path環境變量(我的是Python2.7,這個是爲了運行腳本)
-
添加系統環境變量
- CEF_ARCHIVE_FORMAT=tar.bz2
- DEPOT_TOOLS_WIN_TOOLCHAIN=0
- CEF_USE_GN=0
- GYP_DEFINES=buildtype=Official
- GYP_MSVS_VERSION=2013
- GYP_GENERATORS=ninja,msvs-ninja
VS版本起碼要使用官網指定的最低版本;Win10 SDK必須要有,默認安裝位置在(C:\Program Files (x86)\Windows Kits\10),沒有的話去微軟官網下載。
檢出代碼
- 下載automate-git.py 腳本並保存到一個英文目錄,最好直接在磁盤根目錄建立個簡單的目錄就好,我的是E:\cef\
- 打開cmd切換到你的目錄,然後輸入命令來下載
python automate-git.py --download-dir=e:\cef\source --branch=2623 --no-build --no-distrib --force-clean
其中--branch=2623
是指定要下載的Cef版本; --no-build --no-distrib
是隻下載代碼而不編譯; --force-clean
這個參數用於清理Chromium和Cef的一些檢出信息,如果沒有一次性下載成功而再次執行下載命令時,需要帶上這個參數來清理一些信息,否則檢出會失敗(第一次下載時直接帶上這個參數也可以)。
下載和編譯只需要這個一個腳本就可以,腳本會自動下載depot_tools 、Chromium、Cef等源碼。如果下載過程中出現錯誤,就再次執行這個命令直到下載完成。網絡穩定的話一次性大概5個小時就能成功,不穩定的話經常會出現錯誤。
解決各種編譯錯誤
編譯2623版本的過程中會遇到一些錯誤,導致編譯失敗。Cef編譯一次起碼就要5個小時,真是消耗不起。
一、添加MP3、MP4支持
打開e:\cef\source\chromium\src\cef\cef.gypi文件,在variables節下添加如下配置信息
'proprietary_codecs': 1,
'ffmpeg_branding': 'Chrome',
分別打開e:\cef\source\chromium\src\third_party\ffmpeg\chromium\config\Chrome\win\ia32\config.h
和e:\cef\source\chromium\src\third_party\ffmpeg\chromium\config\Chrome\win\x64\config.h,在原有配置宏FFMPEG_CONFIGURATION
裏增加以下:
–enable-decoder=’rv10,rv20,rv30,rv40,cook,h263,h263i,mpeg4,msmpeg4v1,msmpeg4v2,msmpeg4v3,amrnb,amrwb,ac3,flv’ –enable-demuxer=’rm,mpegvideo,avi,avisynth,h263,aac,amr,ac3,flv,mpegts,mpegtsraw’ –enable-parser=’mpegvideo,rv30,rv40,h263,mpeg4video,ac3’
二、ACTION Copying D3D Compiler DLL錯誤
我最開始就是碰到了這個錯誤,提示找不到d3dcompiler_47.dll
這個文件。後來發現是我的Win10 SDK安裝的不完整,導致(C:\Program Files (x86)\Windows Kits\10\Redist\D3D)目錄裏沒有這個DLL文件。解決方法是去微軟官網下載安裝了最新的Win10 SDK。
三、e:\cef\source\chromium\src\ui\gl\gl_bindings_skia_in_process.cc(860)
在編譯配置文件裏去掉這兩個文件就可以:gl_bindings_skia_in_process.cc和 gl_bindings_skia_in_process.hh
打開src/ui/gl/BUILD.gn和gl.gyp文件,查找這兩個代碼文件並刪掉。詳見https://codereview.chromium.org/1673323002
四、egl語法/類型錯誤
修改 e:\cef\source\chromium\src\third_party\swiftshader\include\egl\eglext.h,第61、62行:
typedef void *EGLSyncKHR, *EGLSync;
typedef intptr_t EGLAttribKHR, EGLAttrib;
五、無法識別的符號_ff_w64_guid_data
修改chromium/third_party/ffmpeg / ffmpeg_generated.gypi,
在行’libavformat/vorbiscomment.c’,後加入’libavformat/w64.c’,
六、e:\cef\source\chromium\src\cef\libcef\browser\browser_host_impl.cc(666): error C2039
查找gyp文件,把print_view_manager_base.h和print_view_manager_base.cc,放到print_view_manager.h和print_view_manager.cc前面
七、屏蔽編譯時的警告,編譯的時候出現警告會暫停編譯
在src\build\common.gypi文件中:搜索'msvs_disabled_warnings'
,設置其中的值爲(我搜索到了好幾處,每一處都這樣設置了):
4091,4127,4351,4355,4503,4589,4611,4100,4121,4244, 4505,4510,4512,4610, 4838, 4995, 4996,
4334,4819,4396, 4125,4130,4131,4189, 4201, 4238,4245,4310,4428, 4481,4530, 4701, 4702,4706,
4067,4800,4251,4702,4456, 4457, 4458, 4459,4312,
編譯代碼
- 編譯前一定要設置系統區域爲英語(美國)並重啓,否則因爲編碼的源碼會導致編譯不通(控制面板-區域-管理-更改系統區域設置-英語(美國)
- 打開cmd切換到你的目錄,然後輸入命令來編譯
python automate-git.py --download-dir=e:\cef3\source --branch=2623 --no-update --no-debug-build --build-log-file --verbose-build --force-distrib --force-build
其中--no-update
是讓腳本不再更新代碼,因爲我們已經下載完畢了; --no-debug-build
是隻編譯release版本,這樣編譯速度會快很多,--no-release-build
可以只編譯debug版本; --force-distrib --force-build
用於強制編譯cef代碼; --build-log-file --verbose-build
用於輸出編譯日誌到e:\cef\source
目錄,名字爲build-2623-release.log
,這個很重要,如果編譯發生錯誤,可以打開這個日誌文件並通過搜索關鍵字FAILED
來查找發生錯誤的文件;
如果需要64位版本,則添加--x64-build
參數
參考資料
Cef官網幫助
http://www.cnblogs.com/hezhixiong/p/5935143.html
http://www.cnblogs.com/longxiang92/p/6141653.html?utm_source=itdadao&utm_medium=referral
http://blog.csdn.net/yufei_lgq/article/details/53838270
http://blog.csdn.net/qsy2000/article/details/52845895?locationNum=12&fps=1
總結
最終Dll輸出路徑爲:
e:\cef\source\chromium\src\out\Release
e:\cef\source\chromium\src\cef\binary_distrib