從源碼編譯cef-chromium的正確步驟

之前編譯過cef-chromium的源碼,但是找不到之前的源碼工程了。幸好壓縮源碼還存在電腦裏。

現在又要編譯一下,因爲需要定製自己需要的功能,這裏就把編譯過程記錄一下,以免以後還會遇到,也分享給需要的讀者。

下載cef-chromium的源碼需要到google網站去,但這個網站被國家封了,所幸我通過其它渠道下載了全部源碼。

打包的源碼在這裏下載:

鏈接:http://pan.baidu.com/s/1pLqAeD1 密碼:0b62

我將源碼解壓到了E盤cef-chromium目錄下,路徑爲:E:\cef-chromium

裏面有cef、chromium、depot_tools3個目錄。

我的機器是Win7 64位的系統,安裝了VS2013和DirectX SDK。

打開VS2013命令行工具,進入路徑E:\cef-chromium\chromium\src\cef,然後輸入cef_create_projects.bat按回車,

提示python.bat不是內部或外部命令。

這裏是編譯依賴工具環境沒有配上,在控制檯界面輸入:

set PATH=E:\cef-chromium\depot_tools;%PATH%

然後再次輸入cef_create_projects.bat,就可以生成VS2013的工程了。



但是我不會用VS2013打開進行編譯,爲什麼?因爲打開VS2013進行編譯,VS2013也是調用ninja進行編譯,無法觀察到具體的編譯細節和進度,就算編譯

出現錯誤了也不會停止,所以最好在命令行下通過ninja進行編譯。

切換到VS2013命令行,然後進入目錄:

cd E:\cef-chromium\chromium\src\out\Release

然後輸入:

ninja

接着就開始編譯了。

編譯過了一會出現了一個錯誤:



error:C2220 警告被視爲錯誤。這個是警告等級在搗鬼,需要把工程裏的編譯警告等級降低!

工程文件很多,需要批量替換,替換工具沒有限制,我用QtCreator進行批量替換。

需要把E:\cef-chromium\chromium\src目錄下的所有.ninja文件裏的/WX換成/W3,這樣警告纔不會被當做錯誤處理。


直接替換了去。然後控制檯下輸入ninja,繼續編譯。

接來下又會出現編譯錯誤停止,這就是第二個坑了:

[6/9584] ACTION Copying D3D Compiler DLL...
FAILED: E:\cef-chromium\depot_tools\python276_bin\python.exe gyp-win-tool action-wrapper environment
.x86 copy_compiler_dll_target_copy_dll_d5e7737f8056aa69e632ead4d36d2ac1..rsp ..\..\third_party\angle
\src

ACTION Copying D3D Compiler DLL
說明這是個拷貝動作出現錯誤,進入目錄:

cd E:\cef-chromium\chromium\src\third_party\angle\src

發現有個copy_compiler_dll.bat,編輯打開此文件,發現有一個拷貝d3dcompiler_46.dll的命令,

直接把這個命令刪除即可,於是copy_compiler_dll.bat的內容變成了這樣:

@echo off
set _arch=%1
set _arch=%_arch:Win32=x86%
改然後切換到命令行,輸入ninja,繼續編譯。

接下來就是漫長的編譯過程,根據CPU性能來決定編譯時間,通常需要2~6小時。

到最後快編譯完成時,又出現了一個錯誤,編譯停止了,這是最後一個坑:

e:\cef-chromium\chromium\src\cef\libcef\browser\chrome_scheme_handler.cc(262) : error C2065: “None
”: 未聲明的標識符


出問題的是這一句:

parser.Add("CEF",base::StringPrintf("%d.%d.%d",CEF_VERSION_MAJOR,CHROME_VERSION_BUILD,CEF_REVISION));

這其實是

CEF_REVISION被定義成了None造成的

打開E:\cef-chromium\chromium\src\cef\include\cef_version.h

可看到

#define CEF_REVISION None
而這個None卻未被定義。

因此,直接改成

#define CEF_REVISION 1930
然後保存。切換到控制檯,輸入ninja繼續編譯。
最後的鏈接需要花不少時間,最終還是編譯成功了。

有圖爲證,看一下編譯結果吧:



VS2013命令行需要設置的變量:
set DXSDK_DIR=C:\Program Files (x86)\Microsoft DirectX SDK (August 2006)
set GYP_GENERATORS=ninja,msvs-ninja
set GYP_MSVS_VERSION=2013
set PATH=K:\cef-chromium\depot_tools;D:\vc2013\bin;D:\vc2013\sdk\Perl516\bin;D:\vc2013\PlatformSDK_8.1\bin\x86;D:\vc2013\sdk\Python278;D:\vc2013\sdk\Python278\DLLs;D:\vc2013\sdk\gles\bin;D:\vc2013\sdk\icu\bin;D:\vc2013\sdk\ruby\bin;D:\vc2013\sdk\tbb\bin;D:\vc2013\sdk\WMDM\lib;D:\vc2013\sdk\git\bin;D:\DirectXSDK2010\Utilities\bin\x86;D:\vc2013\sdk\cmake\bin;D:\vc2013\sdk\gyp;D:\cef_binary_3.2272.2077_windows32\Release;D:\vc2013\sdk\duilib\bin;D:\vc2013\sdk\irrlicht\bin;D:\vc2013\sdk\cef-normal;%PATH%


set INCLUDE=D:\vc2013\sdk\angle\include;D:\vc2013\include;D:\vc2013\PlatformSDK_8.1\Include\um;D:\vc2013\include;D:\vc2013\PlatformSDK_8.1\Include\shared;D:\vc2013\sdk\openvg\include;D:\vc2013\sdk\opengl\include;D:\vc2013\sdk\ruby\include;D:\vc2013\sdk\Python278\include;D:\vc2013\sdk\mysql\include;D:\vc2013\sdk\icu\include;D:\vc2013\sdk\atlmfc\include;D:\vc2013\sdk\WMDM\inc;D:\vc2013\sdk\tbb\include;D:\DirectXSDK2010\Include;D:\vc2013\PlatformSDK_8.1\Include\winrt;D:\cef_binary_3.2272.2077_windows32\include;D:\cef_binary_3.2272.2077_windows32;D:\vc2013\sdk\duilib\include;D:\vc2013\sdk\irrlicht\include;D:\vc2013\sdk\cef-normal\inc


set LIB=D:\vc2013\lib;D:\vc2013\sdk\dx11\lib;D:\vc2013\PlatformSDK_8.1\Lib\winv6.3\um\x86;D:\vc2013\sdk\gnuwin32\lib;D:\vc2013\sdk\opengl\lib;D:\vc2013\sdk\tbb\lib\ia32\vc10;D:\vc2013\sdk\ruby\lib;D:\vc2013\atl\lib;D:\vc2013\sdk\Python278\libs;D:\vc2013\sdk\gles\lib;D:\vc2013\sdk\mysql\lib;D:\vc2013\sdk\icu\lib;D:\vc2013\sdk\angle\lib;D:\vc2013\sdk\atlmfc\lib;D:\vc2013\sdk\WMDM\lib;D:\vc2013\sdk\tbb\lib;D:\vc2013\sdk\WMDM\lib;D:\vc2013\sdk\git\lib;D:\DirectXSDK2010\Lib\x86;D:\cef_binary_3.2272.2077_windows32\Release;D:\vc2013\sdk\duilib\Lib;D:\vc2013\sdk\irrlicht\lib;D:\vc2013\sdk\cef-normal\lib


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章