Chromium內(nèi)核瀏覽器編譯記(四)Linux版本CEF編譯

封面

轉(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就可以了。

編譯過程十分漫長,大概五六個小時,看到下面的提示就代表編譯成功了:

編譯cefclient & chrome_sandbox

生成的文件如下:

cefclient

3.4 生成CEF二進(jìn)制分發(fā)包

當(dāng)前在src目錄下,切換到tools目錄下,執(zhí)行下面的命令:

cd cef/tools

./make_distrib.sh --ninja-build --minimal --x64-build

這個過程還比較快,出現(xiàn)下面的提示就成功了:

編譯完成

生成的文件如下:

分發(fā)包

到這里整個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源碼的編譯就完成了,有問題可以給我留言評論,謝謝。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容