Ubuntu22下源码编译CEF(branch=6045)+mp4+mp3笔记

发布时间:2023年12月18日

前段时间编译了win版本,最近捣鼓一下Ubuntu版本。

配置网络,Ubuntu在网络配置填写了代理,在终端还是要输入

set http_proxy=xxxx:xx
set https_proxy=xxxx:xx

这样避免大部分的git代码下载

为了减少下载代码和避免git那个几G内存的坑,我直接将windows下的版本复制了一份,这也为后面埋下了坑。

根据文档需求,创建了这个文件夹结构,三个子文件夹automate, chromium_git, depot_tools和一个sh文件update.sh,一个py文件 Install-build-deps.py

/media/xxx/linux/code/ (后面简化为~/code方便阅读,实际上~/代表用户根目录,在这里~=/media/xxx/linux。)

  automate/
    automate-git.py   <-- CEF build script
  chromium_git/
  update.sh   <-- Bootstrap script for automate-git.py
  depot_tools/        <-- Chromium build tools
  Install-build-deps.py   <—install deps

先拉automate-git.py,为了方便,我直接git先下一份cef,然后在cef/tools/automate文件夹找到它。将它复制到~/code/automate/下。

1. 安装python3等,下载install-build-deps.py(抄书)

cd ~/code
sudo apt-get install curl file lsb-release procps python3 python3-pip
curl 'https://chromium.googlesource.com/chromium/src/+/main/build/install-build-deps.py?format=TEXT' | base64 -d > install-build-deps.py
sudo python3 ./install-build-deps.py --no-arm --no-chromeos-fonts --no-nacl
python3 -m pip install dataclasses importlib_metadata

2.编写update.sh

#!/bin/bash
python3 ./automate/automate-git.py —download-dir=~/code/chromium_git —depot-tool-dir=~/code/depot_tools  —no-distrib —no-build —branch=6045

运行update.sh之后就得到

chromium_git/

?? cef/

?? chromium/

?? ? ? ? cef/

3.在~/code/chromium_git目录下运行终端

export PATH=~/code/depot_tools:$PATH
set GN_DEFINES=is_official_build=true proprietary_codecs=true ffmpeg_branding=Chrome chrome_pgo_phase=0 use_thin_lto=false use_jumbo_build=true
set GN_ARGUMENTS=--ide=ninja --sln=cef --filters=//cef/*
python3 ./chromium/src/cef/tools/gclient_hook.py —depot-tool-dir=~/code/depot_tools

很快就在 ~/code/chromium_git/chromium/src/out 生成两个子文件夹 Release_GN_X64和Debug_GN_X64

一切看起来很顺利,不过一会就打脸了。

4.编译

export PATH=~/code/depot_tools:$PATH
cd ./chromium/src
Ninja -j8 -C out/Release_GN_X64

还没开始就结束,报错了,clang相关的库找不到。原因在上面有,指向的llvm-build下的windows版本的,根本不可能进行编译。直接删了,结果更快报错。于是相当了同步代码。在~/code/chromium_git/chromium下运行gclient sync,貌似会提示配置NO_AUTH_BOTO_CONFIG,什么鬼?这里同步就算不配置NO_AUTH_BOTO_CONFIG,命令行也没出现error字样的,但是中间会缺失很多文件。使用文档编辑器,写上类似

[Boto]
proxy = <代理服务器的地址>
proxy_port = <代理服务器的端口号>
proxy_user = <代理服务器的用户名>
proxy_pass = <代理服务器的密码>

有些没有proxy_user和proxy_pass的,可以不填。 然后保存到~/code/.boto。命令行走起:

export PATH=~/code/depot_tools:$PATH
export NO_AUTH_BOTO_CONFIG=~/code/.boto
cd ~/code/chromium_git/chromium
gclient sync -D

这样一波操作会清除windows下库,同时同步了linux的clang。查看一下~/code/chromium_git/chromium/src/third_party/llvm-build/Release+Asserts/bin/clang,如果不在,那就死磕它,继续gclient sync

完成之后重新开始,调到步骤1 。

编译中可能遇到的问题:

1 报X11问题,有人提及跳过编译client,但是我还是尝试安装一下xcb系列。

sudo apt install xcb libxcb-xkb-dev x11xkb-utils libx11-xcb-dev libxkbcommon-x11-dev

貌似安装之后不会提示X11/xxxx.h找不到之类的。

2 报vaapi的错,例如: error: no member named ‘subsampling_x’ in ‘__VAEncSequenceParameterBufferAV1….’ ,这google提到是libva的版本太低了。Ubuntu安装的libva-dev是1.14.0,我直接编译一份(2.21.0)

git clone https://github.com/intel/libva
./autogen.sh
./configure
make -j12
sudo make install
#1. GN构建
#手打的,注意检查一下,linux版本有提及use_sysroot=false,这个我没尝试。部分路径可能需要绝对路径,使用pwd查看并改进。
#!/bin/bash
export PATH={绝对路径}/depot:PATH

#这里很坑,用export就一直报错,改为set才行。
set GN_DEFINES=is_official_build=true proprietary_codecs=true ffmpeg_branding=Chrome chrome_pgo_phase=0 use_thin_lto=false
set GN_ARGUMENTS=--filters=//cef/*

python3 ./chromium/src/cef/tools/gclient_hook.py --depot-tools-dir=./depot_tools


#2.编译
#!/bin/bash
export PATH={绝对路径}/depot:PATH
#下面这些文件是我修改的,参考win版编译,其中autorename_libavcodec_hevcdec.c有点不同,需要自行打开vscode补全。
cp ./build_ffmpeg.py ./chromium/src/third_party/ffmpeg/chromium/scripts
cp ./autorename_libavcodec_hevcdec.c ./chromium/src/third_party/ffmpeg/libavcodec/
cp ./autorename_libavformat_hevc.c ./chromium/src/third_party/ffmpeg/libavformat/
cp ./ffmpeg_generated.gni ./chromium/src/third_party/ffmpeg/

cd ./chromium/src
#ninja -j8 -C out/Release_GN_x64 cef  #会缺少chrome_sandbox
#ninja -j8 -C out/Debug_GN_x64 cef  #会缺少chrome_sandbox
ninja -j8 -C out/Release_GN_x64 cefclient cefsimple ceftests chrome_sandbox
ninja -j8 -C out/Debug_GN_x64 cefclient cefsimple ceftests chrome_sandbox

其他的修改可以参考windows编译版本,有些可能配置的文件不一样,我建议只将增加autorename_libavcodec_hevcdec.c和autorename_libavformat_hevc.c到ffmpeg_c_sources下面,将编码相关的放前者,将格式的放后者。编译的时候可能会遇到某某函数找不到,那就用vscode将ffmpeg那个子目录拉进去,搜索一下就可以知道了,授之以鱼不然授之以渔?

有时候一个细节会挂系统,我之前编译一次,在ninja编译的时候没有加-j8,无限制编译模式,结果死机重启后就登录不了,黑屏,真服了。。。后来限制编译速度,不满核跑了。

稍微测了一下下,网上的视频没问题,本地的视频好像只播声音,有点奇怪。

cef_binary_119.4.7+g55e15c8+chromium-119.0.6045.199_docs.zip

链接:https://pan.baidu.com/s/1sRthOHBT4TQaZco58Id8xg?
提取码:ifiz?

cef_binary_119.4.7+g55e15c8+chromium-119.0.6045.199_linux64.zip

链接:https://pan.baidu.com/s/12m8rPSI0QefSk8WQCDPIsw?
提取码:gkkg?

文章来源:https://blog.csdn.net/ftpleopard/article/details/135022908
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。