Chromium内核浏览器编译记(四)Linux版本CEF编译

转载请注明出处:https://blog.csdn.net/kong_gu_you_lan/article/details/136508294

本文出自 容华谢后的博客

0.写在前面

本篇文章是用来记录编译Linux版本CEF的步骤和踩过的坑,以防止后续再用到的时候忘记,同时也希望能够帮助到遇到同样问题的同学。

简单介绍下CEF,CEF的全称是Chromium Embedded Framework(Chromium嵌入式框架),它是一个开源的软件框架,用于嵌入Chromium浏览器引擎到其他应用程序中。允许开发者将Chromium的强大的Web渲染引擎嵌入到他们自己的应用程序中,以实现内嵌的浏览器功能,目前支持Windows、Linux、macOS平台。

本文的开发环境使用的是VMware虚拟机,在上面安装了Ubuntu 20.04.4 64位操作系统,分配了200G的硬盘空间,16G内存,12核心CPU,编译时间大概在5小时左右。

1.准备工作

因为Chromium的源码都在外面的世界,所以在下载源码之前,先要在Ubuntu系统上开启代理,本文中使用的是Clash工具,在GitHub中可以搜索到Linux版本客户端。

1.1 安装Git

使用以下命令安装:

sudo apt-get install git

设置Git网络代理:

git config --global http.proxy http://127.0.0.1:端口号git config --global https.proxy https://127.0.0.1:端口号

下载源码的过程中,可能会报Git缓存的异常,可以通过以下命令把缓存设置的大一些:

sudo git config --global http.postBuffer 5242880000sudo 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

配置环境变量:

export PATH="$PATH:$HOME/depot_tools"

注意:文章中是把depot_tool下载到了【home/用户名】目录下,所以使用【$HOME】代表,环境变量要根据实际下载的路径修改。

源码的位置在这里:

源码位置

1.3 配置下载工具代理

在【home/用户名】目录下新建一个**.boto**文件:

[boto]
proxy=127.0.0.1
proxy_port=端口号

配置环境变量:

export NO_AUTH_BOTO_CONFIG="$PATH:$HOME/.boto"

2.源码下载

2.1 创建目录结构

当前处于【home/用户名】目录下,执行以下命令,创建几个文件夹:

mkdir CEF && cd CEF && mkdir automate && mkdir chromium_git

最终的目录结构是这样的:

~/CEF/automate/automate-git.py/chromium_git/cef/chromium/update.sh~/depot_tools/

2.2 下载automate-git.py脚本

当前在CEF目录下,需要切换到automate目录下,执行下面的命令下载脚本:

cd automatewget https://bitbucket.org/chromiumembedded/cef/raw/master/tools/automate/automate-git.py

2.3 创建update.sh脚本

当前在automate目录下,需要切换到chromium_git目录下:

cd ..cd chromium_git

脚本内容:

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的分支版本,可以指定需要的版本,如果需要最新版本直接去掉这个参数就可以,–chromium-checkout 是Chromium源码的Tag版本,如果不需要指定可以去掉。注意如果需要指定版本,CEF的版本和Chromium的版本要保持一致。

–download-dir 后的路径修改成你设备上的实际路径,alidili是用户名,–depot-tools-dir 改成在1.2中下载的depot_tools的路径。

2.4 下载源码

当前在chromium_git目录下,执行下面的命令:

chmod 755 update.sh./update.sh

可以看到下面的进度提示:

下载源码

提示这个就代表下载完了,如果中途下载失败了,重新执行上面的命令就可以了:

下载源码完成

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"

当前在chromium_git目录下,切换到cef目录下,执行生成工程脚本:

cd chromium/src/cef./cef_create_projects.sh

看到这个提示就代表构建成功了:

生成工程文件

3.3 编译cefclient与chrome_sandbox

当前在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二进制分发包

当前在src目录下,切换到tools目录下,执行下面的命令:

cd cef/tools./make_distrib.sh --ninja-build --minimal --x64-build

这个过程还比较快,出现下面的提示就成功了:

编译完成

生成的文件如下:

分发包

到这里整个CEF就编译完成了。

生成的cefclient在/home/alidili/CEF/chromium_git/chromium/src/out目录下

生成的分发包在/home/alidili/CEF/chromium_git/chromium/src/cef/binary_distrib目录下

4.遇到的问题

4.1 磁盘空间

源码+编译缓存大概会占用100多G的空间,如果用虚拟机的话,硬盘空间一定要预留够,大概200G差不多。

4.2 depot_tools环境变量

Chromium是使用depot_tools来管理源码的,如果拉取源码的时候,提示找不到fetch指令,那一定是环境变量的问题了,仔细看下路径设置的对不对。

4.3 Git网络代理

记得一定要给Git设置网络代理,不能拉取源码会一直超时,梯子我用的收费的Ghelper,里面有Clash的订阅。

4.4 下载源码不全怎么办

在2.4步骤中,使用update.sh下载源码,因为Chroium源码比较大,中间可能因为网络原因,导致下载超时或者个别文件下载不全,这个时候再次执行update.sh也可能同步不全。

这个时候,在 /CEF/chromium_git/chromium/src 目录下执行下面的命令同步Chromium的源码:

gclient sync

4.5 编译总是失败

编译的时候可能会报一些异常,这些异常大部分是因为源码不全导致的,使用下面的命令重置下代码:

git reset --hard

然后删除 /CEF/chromium_git 目录和 /CEF/chromium_git/chromium/src 目录下的cef目录,然后重新执行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-0sudo apt install libgtk-3-dev

安装了上面的gtk库,有可能还是提示找不到,配置下环境变量:

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%的问题都是因为源码不全或者缺少相关库导致的,不要试图修改源码解决问题,不然会发送连锁的错误反应浪费时间。

如果遇到编译无论如何都过不了的问题,相信我,不要做别的操作了,删除所有源码,重新按照步骤再来一遍。

5.写在最后

下载和编译的过程中,可能会遇到各种各样奇怪的问题,奇怪到各个搜素引擎都搜不到答案,ChatGPT也给不出切实的解决方案,不断的查搜索引擎、查文档、查StackOverFlow,不断的换提问的方式,查到头脑发昏心情不好,这个时候千万不要放弃,问题离解决只差一步了,当看到编译成功的提示时,一切都是值得的,守得云开见月明。

到这里,Chromium CEF源码的编译就完成了,有问题可以给我留言评论,谢谢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/271229.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

离散数学例题——5.图论基础

基本的图 关联矩阵 子图和补图 度数和握手定理 注意!!!无向图的度数,要行/列和对角线值 根据度数序列判定是否为无向图 度和握手定理证明题 竞赛图 同构图 自补图 通路和回路数量 通路和回路数量 最短路径——dijkstra算法 连通…

[数据结构初阶]队列

鼠鼠我呀,今天写一个基于C语言关于队列的博客,如果有兴趣的读者老爷可以抽空看看,很希望的到各位老爷观点和点评捏! 在此今日,也祝各位小姐姐女生节快乐啊,愿笑容依旧灿烂如初阳,勇气与童真永不…

【HTML】HTML基础7.2(有序列表)

目录 标签 效果 注意 标签 <ol> <li>列表内容</li> <li>列表内容</li> <li>列表内容</li> <li>列表内容</li> 。。。。。。 </ol> 效果 代码 <ol><li>银河护卫队 10000000000</li><l…

RUST 每日一省:发布到crates.io

github是开源代码分享的地方&#xff0c;rust的开源项目除了github&#xff0c;我们还可以将其发布到 crates.io 上&#xff0c;然后其它用户就可以使用cargo进行安装使用了。其实步骤很简单&#xff0c;只有三条命令了&#xff0c;我们一次来看一下。 1、cargo package 首先&a…

Threejs着色器(GPU)编程——感温管网

管网,作为支撑现代城市运转的重要基础设施,是隐藏在地面之下的庞大工程网络。这些管网如同城市的血脉,负责输送各种必要的资源,如水源、热力、燃气等,同时排除废水和其他废弃物。然而,由于其位于地下,人们往往难以直接感知其存在和运行状态。为了保障这些地下管网的安全…

Go编程实战:高效利用encoding/binary进行数据编解码

Go编程实战&#xff1a;高效利用encoding/binary进行数据编解码 引言encoding/binary 包核心概念ByteOrder 接口Binary 数据类型的处理处理复杂数据结构 基础使用教程数据类型与二进制格式的映射基本读写操作写操作 - binary.Write读操作 - binary.Read 错误处理 高级功能与技巧…

手机备忘录可以设置密码吗 能锁屏加密的备忘录

在繁忙的生活中&#xff0c;手机备忘录成了我随身携带的“小秘书”。那些关于工作的灵感、生活的琐事&#xff0c;甚至深藏心底的小秘密&#xff0c;都被我一一记录在里面。然而&#xff0c;每次当手机离开我的视线&#xff0c;或者需要借给他人使用时&#xff0c;我总会心生担…

Vue+SpringBoot打造校园疫情防控管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生2.2 老师2.3 学校管理部门 三、系统展示四、核心代码4.1 新增健康情况上报4.2 查询健康咨询4.3 新增离返校申请4.4 查询防疫物资4.5 查询防控宣传数据 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBoot…

力扣刷题Days12第二题--100相同的树(js)

目录 1,题目 2&#xff0c;代码 2.1深度优先遍历 2.2广度优先遍历 3&#xff0c;学习与总结 1,题目 给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是…

数字孪生10个技术栈:数据处理的六步骤,以获得可靠数据。

一、什么是数据处理 在数字孪生中&#xff0c;数据处理是指对采集到的实时或历史数据进行整理、清洗、分析和转化的过程。数据处理是数字孪生的基础&#xff0c;它将原始数据转化为有意义的信息&#xff0c;用于模型构建、仿真和决策支持。 数据处理是为了提高数据质量、整合数…

ElasticSearch之通过search after和scroll解决深度分页问题

写在前面 通过from&#xff0c;size来进行分页查询时&#xff0c;如下&#xff1a; 当from比较大时会有深度分页问题&#xff0c;问题产生的核心是coordinate node需要从每个分片中获取fromsize条数据&#xff0c;当from比较大&#xff0c;整体需要获取的数据量也会比较大&am…

阿珊解析Vuex:实现状态管理的利器

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

[c++] c++ 中的顺序(构造,析构,初始化列表,继承)

对象构造的时候&#xff0c;对象成员变量的初始化顺序是什么样的 &#xff1f; 派生类构造的时候&#xff0c;先构造基类还是先构造派生类 &#xff1f; 构造函数中的初始化列表&#xff0c;初始化的顺序是列表的顺序吗 &#xff1f; 析构的时候&#xff0c;析构的顺序是什么…

静态时序分析:典型与非典型时序路径的约束详解(一)

相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm1001.2014.3001.5482 时序路径是静态时序分析中的一个重要概念&#xff0c;了解时序路径能帮助设计者更好地编写SDC脚本&#xff0c;本文旨在详细介绍时序路径相关内容。 首先给出时序…

【重制版】WSDM 2024 2023时空时序论文总结

&#x1f31f;【紧跟前沿】“时空探索之旅”与你一起探索时空奥秘&#xff01;&#x1f680; 欢迎大家关注时空探索之旅 WSDM 2024于2024年3月4日-3月8日在墨西哥梅里达&#xff08;Mrida, Mxico&#xff09;正在举行。目前官网已经放出了所有被录用论文的表单&#xff08;链接…

实现消息队列(Kafka、ActiveMQ、RabbitMQ和RocketMQ)高可用

概述 单机没有高可用可言&#xff0c;高可用都对集群来说的 要保证消息队列系统&#xff08;如Kafka、ActiveMQ、RabbitMQ和RocketMQ&#xff09;的高可用性&#xff0c;可以采取以下一些通用的措施&#xff1a; 集群部署&#xff1a;将消息队列系统部署为集群&#xff0c;包…

uniapp和vue项目配置多语言,实现前端切换语言

在uniapp中配置多语言功能&#xff0c;实现前端切换语言&#xff0c;可以按照以下步骤进行&#xff1a; 1. 创建语言包 首先&#xff0c;创建一个名为 lang 的目录&#xff0c;并在该目录下为每种支持的语言创建对应的JSON或JS文件。例如&#xff1a; lang/en.js&#xff08…

【Linux】深入理解cd命令

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Linux ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 基本用法&#xff1a; 相对路径和绝对路径&#xff1a; 特殊符号和快捷方式&#xff1a; 符号链接&#xff1a; 自动补全&…

重装系统后正版office如何安装

前言 重装系统后&#xff0c;正版office如何安装 登录官网 https://www.microsoft.com 下载office https://account.microsoft.com/services

培训机构新助力:教务管理工教务管理新境界:完善流程,高效运营触手可及具

随着科技的不断进步&#xff0c;教育领域正迎来一场革命性的变革。乔拓云教育系统&#xff0c;作为这场变革的引领者&#xff0c;正以其卓越的功能和高效的解决方案&#xff0c;为培训机构带来前所未有的教务管理新篇章。 一、高效排课&#xff0c;让教务管理更轻松 乔拓云教育…