
轉(zhuǎn)載請注明出處:http://m.itdecent.cn/p/dd7ecb170f41
本文出自 容華謝后的博客
0.寫在前面
本篇文章是用來記錄編譯Linux版本CEF的步驟和踩過的坑,以防止后續(xù)再用到的時候忘記,同時也希望能夠幫助到遇到同樣問題的同學(xué)。
簡單介紹下CEF,CEF的全稱是Chromium Embedded Framework(Chromium嵌入式框架),它是一個開源的軟件框架,用于嵌入Chromium瀏覽器引擎到其他應(yīng)用程序中。允許開發(fā)者將Chromium的強(qiáng)大的Web渲染引擎嵌入到他們自己的應(yīng)用程序中,以實現(xiàn)內(nèi)嵌的瀏覽器功能,目前支持Windows、Linux、macOS平臺。
本文的開發(fā)環(huán)境使用的是VMware虛擬機(jī),在上面安裝了Ubuntu 20.04.4 64位操作系統(tǒng),分配了200G的硬盤空間,16G內(nèi)存,12核心CPU,編譯時間大概在5小時左右。
1.準(zhǔn)備工作
因為Chromium的源碼都在外面的世界,所以在下載源碼之前,先要在Ubuntu系統(tǒng)上開啟代理,本文中使用的是Clash工具,在GitHub中可以搜索到Linux版本客戶端。
1.1 安裝Git
使用以下命令安裝:
sudo apt-get install git
設(shè)置Git網(wǎng)絡(luò)代理:
git config --global http.proxy http://127.0.0.1:端口號
git config --global https.proxy https://127.0.0.1:端口號
下載源碼的過程中,可能會報Git緩存的異常,可以通過以下命令把緩存設(shè)置的大一些:
sudo git config --global http.postBuffer 5242880000
sudo git config --global https.postBuffer 5242880000
1.2 配置depot_tools
Chromium使用了depot_tools來管理代碼,先通過Git拉取代碼:
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
配置環(huán)境變量:
export PATH="$PATH:$HOME/depot_tools"
注意:文章中是把depot_tool下載到了【home/用戶名】目錄下,所以使用【$HOME】代表,環(huán)境變量要根據(jù)實際下載的路徑修改。
源碼的位置在這里:

1.3 配置下載工具代理
在【home/用戶名】目錄下新建一個.boto文件:
[boto]
proxy=127.0.0.1
proxy_port=端口號
配置環(huán)境變量:
export NO_AUTH_BOTO_CONFIG="$PATH:$HOME/.boto"
2.源碼下載
2.1 創(chuàng)建目錄結(jié)構(gòu)
當(dāng)前處于【home/用戶名】目錄下,執(zhí)行以下命令,創(chuàng)建幾個文件夾:
mkdir CEF && cd CEF && mkdir automate && mkdir chromium_git
最終的目錄結(jié)構(gòu)是這樣的:
~/CEF/
automate/
automate-git.py/
chromium_git/
cef/
chromium/
update.sh
~/depot_tools/
2.2 下載automate-git.py腳本
當(dāng)前在CEF目錄下,需要切換到automate目錄下,執(zhí)行下面的命令下載腳本:
cd automate
wget https://bitbucket.org/chromiumembedded/cef/raw/master/tools/automate/automate-git.py
2.3 創(chuàng)建update.sh腳本
當(dāng)前在automate目錄下,需要切換到chromium_git目錄下:
cd ..
cd chromium_git
腳本內(nèi)容:
python3 ../automate/automate-git.py --download-dir=/home/alidili/CEF/chromium_git --branch=5414 --chromium-checkout=109.0.5414.120 --depot-tools-dir=/home/alidili/depot_tools --no-distrib --no-build
其中 --branch 是CEF的分支版本,可以指定需要的版本,如果需要最新版本直接去掉這個參數(shù)就可以,--chromium-checkout 是Chromium源碼的Tag版本,如果不需要指定可以去掉。注意如果需要指定版本,CEF的版本和Chromium的版本要保持一致。
--download-dir 后的路徑修改成你設(shè)備上的實際路徑,alidili是用戶名,--depot-tools-dir 改成在1.2中下載的depot_tools的路徑。
2.4 下載源碼
當(dāng)前在chromium_git目錄下,執(zhí)行下面的命令:
chmod 755 update.sh
./update.sh
可以看到下面的進(jìn)度提示:

提示這個就代表下載完了,如果中途下載失敗了,重新執(zhí)行上面的命令就可以了:

3.源碼編譯
3.1 支持音視頻
源碼下載完成后,需要修改下支持音視頻,打開這個頭文件:
chromium_git/chromium/src/third_party/ffmpeg/chromium/config/Chromium/linux/x64/config_components.h
#define CONFIG_SIPR_PARSER 1 由0修改為1,啟用FFmpeg。
3.2 生成工程
終端輸入這個命令:
export GN_DEFINES="use_sysroot=true symbol_level=1 is_cfi=false use_thin_lto=false use_vaapi=false ffmpeg_branding=Chrome proprietary_codecs=true is_official_build=true use_gnome_keyring=false chrome_pgo_phase=0"
當(dāng)前在chromium_git目錄下,切換到cef目錄下,執(zhí)行生成工程腳本:
cd chromium/src/cef
./cef_create_projects.sh
看到這個提示就代表構(gòu)建成功了:

3.3 編譯cefclient與chrome_sandbox
當(dāng)前在cef目錄下,切換到src目錄下,終端輸入下面的命令:
cd ..
ninja -C out/Release_GN_x64 cefclient chrome_sandbox
如果想要生成Debug版本,Release_GN_x64改成Debug_GN_x64就可以了。
編譯過程十分漫長,大概五六個小時,看到下面的提示就代表編譯成功了:

生成的文件如下:

3.4 生成CEF二進(jìn)制分發(fā)包
當(dāng)前在src目錄下,切換到tools目錄下,執(zhí)行下面的命令:
cd cef/tools
./make_distrib.sh --ninja-build --minimal --x64-build
這個過程還比較快,出現(xiàn)下面的提示就成功了:

生成的文件如下:

到這里整個CEF就編譯完成了。
生成的cefclient在/home/alidili/CEF/chromium_git/chromium/src/out目錄下
生成的分發(fā)包在/home/alidili/CEF/chromium_git/chromium/src/cef/binary_distrib目錄下
4.遇到的問題
4.1 磁盤空間
源碼+編譯緩存大概會占用100多G的空間,如果用虛擬機(jī)的話,硬盤空間一定要預(yù)留夠,大概200G差不多。
4.2 depot_tools環(huán)境變量
Chromium是使用depot_tools來管理源碼的,如果拉取源碼的時候,提示找不到fetch指令,那一定是環(huán)境變量的問題了,仔細(xì)看下路徑設(shè)置的對不對。
4.3 Git網(wǎng)絡(luò)代理
記得一定要給Git設(shè)置網(wǎng)絡(luò)代理,不能拉取源碼會一直超時,梯子我用的收費(fèi)的Ghelper,里面有Clash的訂閱。
4.4 下載源碼不全怎么辦
在2.4步驟中,使用update.sh下載源碼,因為Chroium源碼比較大,中間可能因為網(wǎng)絡(luò)原因,導(dǎo)致下載超時或者個別文件下載不全,這個時候再次執(zhí)行update.sh也可能同步不全。
這個時候,在 /CEF/chromium_git/chromium/src 目錄下執(zhí)行下面的命令同步Chromium的源碼:
gclient sync
4.5 編譯總是失敗
編譯的時候可能會報一些異常,這些異常大部分是因為源碼不全導(dǎo)致的,使用下面的命令重置下代碼:
git reset --hard
然后刪除 /CEF/chromium_git 目錄和 /CEF/chromium_git/chromium/src 目錄下的cef目錄,然后重新執(zhí)行update.sh腳本即可。
4.6 編譯過程中提示:No such file or directory: 'gcc'
提示缺什么庫,通過下面的命令安裝什么就可以了:
sudo apt install gcc
4.7 編譯過程中提示:提示 gtk/gtk.h file not found
同4.6,缺什么安裝什么就可以了:
sudo apt-get install libgtk-3-0
sudo apt install libgtk-3-dev
安裝了上面的gtk庫,有可能還是提示找不到,配置下環(huán)境變量:
export CPATH=$CPATH:/usr/include/gtk-3.0
export CPATH=$CPATH:/usr/include/gtk-3.0/gtk
export CPATH=$CPATH:/usr/include/gtk-3.0/gdk
export CPATH=$CPATH:/usr/include/gtk-3.0/unix-print
4.8 不要嘗試修改源碼解決編譯問題
編譯中遇到的99%的問題都是因為源碼不全或者缺少相關(guān)庫導(dǎo)致的,不要試圖修改源碼解決問題,不然會發(fā)送連鎖的錯誤反應(yīng)浪費(fèi)時間。
如果遇到編譯無論如何都過不了的問題,相信我,不要做別的操作了,刪除所有源碼,重新按照步驟再來一遍。
5.寫在最后
下載和編譯的過程中,可能會遇到各種各樣奇怪的問題,奇怪到各個搜素引擎都搜不到答案,ChatGPT也給不出切實的解決方案,不斷的查搜索引擎、查文檔、查StackOverFlow,不斷的換提問的方式,查到頭腦發(fā)昏心情不好,這個時候千萬不要放棄,問題離解決只差一步了,當(dāng)看到編譯成功的提示時,一切都是值得的,守得云開見月明。
到這里,Chromium CEF源碼的編譯就完成了,有問題可以給我留言評論,謝謝。