CEF源碼編譯


CEF的構造說明:
https://bitbucket.org/chromiumembedded/cef/wiki/BranchesAndBuilding

chromium的源碼地址:
https://chromium.googlesource.com/chromium/src.git

cef的源碼地址:
https://bitbucket.org/chromiumembedded/cef/src/2357?at=2357

CEF源碼中的文件CHROMIUM_BUILD_COMPATIBILITY.txt中有相應的chromium的tag(如:refs/tags/43.0.2357.130)

下載源碼編譯,先下載depot_tools並添加到環境變量path中。

自動下載編譯:
1、mkdir code
2、cd code
3、下載depot_tools並解壓到當前文件夾。
4、創建automate文件夾,將下載的automate-git.py放在其下面。
5、創建chromium文件夾,並在其下面創建update.bat,update.bat文件內容為:
python ..\automate\automate-git.py --download-dir=g:\code\chromium --depot-tools-dir=g:\code\depot_tools --branch=2357
6、在命令行執行update.bat自動下載並編譯源碼。
備注:bat中的選項可以有:
--download-dir 源碼下載目錄
--depot-tools-dir 工具包目錄
--branch 源碼分支(默認trunk主分支)
--checkout 指定patch版本(默認最近提交)
--no-build 下載完不自動開始編譯(我們需要修改編譯配置)
--no-update 確定源碼下載完畢僅重新編譯時使用
--force-build 強制編譯(發現在有成功編譯的時候再編譯不會執行,可以加上這個
--no-debug-build 只編譯release版本
--no-release-build 只編譯debug版本
如何確定--checkout值
如果確定需要分支下的最新版本,請略過此節。
1.從http://cefbuilds.com/檢查目標版本的hash值。例:3.2357.1281.gd660177中的gd660177
2.從https://bitbucket.org/chromiumembedded/cef/branches/進入目標分支。例:2357
3.在Commits中檢索目標hash,注意版本號中hash為8位,commits中為7位,可以忽略第一位搜索。例:gd660177->d660177
4.點擊相應commit,即可在地址欄中得到checkout值。例:d66017718b0f0d44da42b706c3c2aa5c0c103852

手工下載編譯:

按照https://bitbucket.org/chromiumembedded/cef/wiki/BranchesAndBuilding文中段

Release Branch

下面的操作一步一步進行。

(注意:先下載chromium源碼,再下載cef源碼,cef源碼務必放在chromium源碼的src下面的cef文件夾里)

0、先要將windows的語言變成英語,安裝vs2015 professional update3, windows sdk Win10.0.10586

1、設置環境變量
set DEPOT_TOOLS_WIN_TOOLCHAIN=0
set GYP_GENERATORS=ninja
set GYP_MSVS_VERSION=2015
SET CEF_USE_GN=0
set CEF_ARCHIVE_FORMAT=tar.gz
set GYP_DEFINES=branding=Chromium buildtype=Official proprietary_codecs=1 ffmpeg_branding=Chrome windows_sdk_path="C:\Program Files (x86)\Windows Kits\10"

要支持播mp3必須修改chromium\src\cef\cef.gypi,下面variables增加兩行。

'variables': {
'proprietary_codecs': 1,
'ffmpeg_branding': 'Chrome',

2、進入到chromium\src\cef目錄,執行cef_create_projects.bat
3、進入到chromium\src目錄,使用ninja進行編譯(區別在於編譯過程信息輸出的位置)

ninja -C out\Debug libcef 

ninja -C out\Debug libcef > d:\build.log

下面錯誤解決辦法:打開eglext.h,在其第62行下面加入:typedef EGLAttribKHR EGLAttrib;即可。

  1. src\third_party\swiftshader\include\egl\eglext.h(119): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
  2. src\third_party\swiftshader\include\egl\eglext.h(119): error C2143: syntax error: missing ',' before '*'
  3. src\third_party\swiftshader\include\egl\eglext.h(120): error C2061: syntax error: identifier 'EGLAttrib'
  4. src\third_party\swiftshader\include\egl\eglext.h(515): error C2061: syntax error: identifier 'EGLAttrib

Release下鏈接錯誤:
ffmpeg.lib(ffmpeg.wavdec.obj) : error LNK2001: unresolved external symbol _ff_w64_guid_data
原因:https://chromium-review.googlesource.com/c/343398/4

解決辦法:
第一步(不知道不改行不行,單做這一步肯定是不行)
chromium/src/third_party/ffmpeg/ffmpeg_generated.gni
chromium/src/third_party/ffmpeg/ffmpeg_generated.gypi
"libavformat/vorbiscomment.c",下面新增下面一行。
"libavformat/w64.c",
第二步 (一定要做)
chromium\src\out\Release\obj\third_party\ffmpeg\ffmpeg.ninja,按wavdec關鍵字搜索,
1、找到
build obj\third_party\ffmpeg\libavformat\ffmpeg.wavdec.obj: cc $
..\..\third_party\ffmpeg\libavformat\wavdec.c
這兩行復制一份插到當前位置,並把wavdec改成w64,結果變成:
build obj\third_party\ffmpeg\libavformat\ffmpeg.w64.obj: cc $
..\..\third_party\ffmpeg\libavformat\w64.c
build obj\third_party\ffmpeg\libavformat\ffmpeg.wavdec.obj: cc $
..\..\third_party\ffmpeg\libavformat\wavdec.c
2、繼續找到行:obj\third_party\ffmpeg\libavformat\ffmpeg.wavdec.obj $
這行復制一份插到當前位置,並把wavdec改成w64,結果變成:
obj\third_party\ffmpeg\libavformat\ffmpeg.w64.obj $
obj\third_party\ffmpeg\libavformat\ffmpeg.wavdec.obj $


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM