使用VS2022编译CEF

前提

选择编译的版本

CEF自动编译,在这里可以看到最新的稳定版和Beta版。

稳定版和Beta版

从这里得出,最新的稳定版是134.0.6998.118,对应的cef branch是6998。通过这个信息可以在Build requirements查到相关的软件配置信息。

编译的软件配置信息

这里主要看Windows下的编译要求信息,其它系统下的请自行匹配。列举信息如下:

  • 系统,Windows10及以上,系统一定要选英文

  • Visual studio 2022 17.9.2及以上

  • Windows SDK 10.0.22621.0

    VS2022安装

  • Ninja 最新版本,安装完成之后还需要在系统变量的Path中配置该安装路径。

  • Windows SDK,选中Debugging Tools For Windows。

    Debugging

下载源码配置

windows配置 ,根据该配置信息进行配置

  1. 在C盘创建下载文件夹

    code

    ---- automate

    ---- chromium_git

    ---- depot_tools

  2. 安装python和git

    下载depottools.zip,并解压到c:\code\depot_tools文件夹下,然后运行update_depot_tools.bat。这里运行bat,不仅可以安装Python和Git,还可以检测网络连通情况,这里的连通主要是指访问Cef和Chromium源码的情况。如果执行不成功,请你加一个梯子。

    1. 最好使用clash并开启TUN模式,这样就可以轻松访问所有资源,而检测TUN模式是否开启的方式,就是在CMD下执行ping,是否能ping通chromium.googlesource.com。

    2. 如果不能开启类TUN服务模式,那就通过设置proxy实现

      set http_proxy=http://127.0.0.1:7890 & set https_proxy=http://127.0.0.1:7890
      
  3. 配置git,参考链接

    $ git config --global user.name "My Name"
    $ git config --global user.email "my-name@chromium.org"
    $ git config --global core.autocrlf false
    $ git config --global core.filemode false
    $ git config --global core.preloadindex true
    $ git config --global core.fscache true
    $ git config --global branch.autosetuprebase always
    // 如果是使用的代理,最好也配置一下Git的代理,防止拉代码失败
    git config --global http.proxy "http://127.0.0.1:7890"
    git config --global https.proxy "http://127.0.0.1:7890"
    
  4. 检测python是否配置成功,以下展示的是两个版本的python展示方式,根据命令来决定使用哪个版本的python。

    检测python

  5. 查看Ninja、Git和depot_tools的环境变量配置

    Ninja和Git

  6. 下载automate-git.py脚本,并放到c:\code\automate目录下。

    这里有一个注意点,如果CPU的物理核心低于16核,需要把automate-git.py文件中的 --jobs 16 中的16修改为小于等于物理核心数。防止在下载时出现如下错误。

    subprocess.CalledProcessError: Command '['gclient', 'sync', '--nohooks', '--with_branch_heads', '--jobs', '16']' returned non-zero exit status 1
    

下载

完成以上所有配置之后,就要开始下载源码了。开始下载之前,先根据自己的需求编写下载脚本。

在c:\code\chromium_git目录下创建update.bat文件并写入满足需求的脚本。

//开启对H264的支持
set GN_DEFINES=is_official_build=true proprietary_codecs=true ffmpeg_branding=Chrome
set GN_ARGUMENTS=--ide=vs2022 --sln=cef --filters=//cef/*
//下载6998分支
python3 ..\automate\automate-git.py --download-dir=c:\code\chromium_git --depot-tools-dir=c:\code\depot_tools --branch=6998 --no-distrib --no-build --force-clean

–download-dir:指定源码下载路径

–depot-tools-dir:指定工具包目录

–branch:指定cef分支

–no-distrib:不进行打包发布

–no-build: 下载完成之后不自动开始编译

–force-clean:用于清理Chromium和Cef下的检出信息,如果下载失败需要重新下载时,需要带上这个参数来清理检出错误信息
然后就可以运行update.bat脚本,开始漫长的下载过程了。

编译

修改配置项,到c:\code\chromiumgit\chromium\src\third_party\ffmpeg\chromium\config\Chrome下的win\x64\config_components.h和win-msvc\x64\config.h,修改CONFIG_SIPR_PARSER的值为1。如果还有其它需求,请自行搜索其中的宏定义含义并做相应的修改。

在源码下载完成之后,就需要开始编译源码。在c:\code\chromium_git\chromium\src\cef 目录下创建create.bat,并编写以下脚本。

set GN_DEFINES=is_official_build=true proprietary_codecs=true ffmpeg_branding=Chrome
set GN_ARGUMENTS=--ide=vs2022 --sln=cef --filters=//cef/*
call cef_create_projects.bat

运行create.bat脚本,开始创建编译目录及相关文件。完成之后会在c:\code\chromium_git\chromium\src\out\ 目录下生成8个文件夹。

  • Debug*_GN_x86*
  • Debug*_GN_x86_sandbox*
  • Release*_GN_x86*
  • Release*_GN_x86_sandbox*
  • Debug*_GN_x64*
  • Debug*_GN_x64_sandbox*
  • Release*_GN_x64*
  • Release*_GN_x64_sandbox*

接着就可以通过ninja进行编译生成。

//执行Debug的编译
ninja -C out\Debug_GN_x64 cef
//编译sandbox
ninja -C out\Debug_GN_x64_sandbox cef_sandbox

Release版本的编译,只需要把Debug替换为Release。由于有5万多个文件要编译,所以编译时间会比较长,需要耐心等待。

编译完成之后,可打开cefclient.exe文件,使用http://html5test.com测试是否支持H264文件。

打包

在编译完成之后,还需要执行打包命令才能把所有的依赖头文件和库文件都归档出来。

跳到c:\code\chromium_gti\chomium\src\cef\tools目录下,找到make_distrib.bat脚本,因为要打包x64的库文件,所以要加上–x64-build。

make_distrib.bat --ninja-build --x64-build

可选项:

–no-docs:不生成文档

–no-symbols:不生成symbols文件

–client:只打包客户端相关的文件

–minimal:不打包Debug文件

打包完成之后,会生成以下文件。

打包结果

到此就完成了cef的编译,接下来就是引入项目并使用cef加载所需的web内容。

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

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

相关文章

C++20:玩转 string 的 starts_with 和 ends_with

文章目录 一、背景与动机二、string::starts_with 和 string::ends_with(一)语法与功能(二)使用示例1\. 判断字符串开头2\. 判断字符串结尾 (三)优势 三、string_view::starts_with 和 string_view::ends_w…

智能飞鸟监测 守护高压线安全

飞鸟检测新纪元:视觉分析技术的革新应用 在现代化社会中,飞鸟检测成为了多个领域不可忽视的重要环节。无论是高压线下的安全监测、工厂内的生产秩序维护,还是农业区的作物保护,飞鸟检测都扮演着至关重要的角色。传统的人工检测方…

ADC噪声全面分析 -04- 有效噪声带宽简介

为什么要了解ENBW? 了解模数转换器 (ADC) 噪声可能具有挑战性,即使对于最有经验的模拟设计人员也是如此。 Delta-sigma ADC 具有量化和热噪声的组合,这取决于 ADC 的分辨率、参考电压和输出数据速率 (ODR)。 在系统级别,额外的信…

STM32单片机uCOS-Ⅲ系统10 内存管理

目录 一、内存管理的基本概念 二、内存管理的运作机制 三、内存管理的应用场景 四、内存管理函数接口讲解 1、内存池创建函数 OSMemCreate() 2、内存申请函数 OSMemGet() 3、内存释放函数 OSMemPut() 五、实现 一、内存管理的基本概念 在计算系统中,变量、中…

考研课程安排(自用)

文章目录 408数据结构(王道)计算机组成原理(王道)操作系统(王道)计算机网络(湖科大版) 数学一高等数学(微积分)线性代数和概率论 408 数据结构(王…

ultraiso制作u盘启动

UltraISO制作U盘启动盘的方法 UltraISO是一款功能强大的工具,可以帮助用户将ISO镜像文件写入U盘,从而制作成可启动的系统安装盘。以下是详细的步骤和注意事项: 1. ‌准备工作‌ ‌硬件准备‌:一个容量至少为8GB的U盘&#xff0…

C语言-发布订阅模式详解与实践

文章目录 C语言发布订阅模式详解与实践1. 什么是发布订阅模式?2. 为什么需要发布订阅模式?3. 实际应用场景4. 代码实现4.1 UML 关系图4.2 头文件 (pubsub.h)4.3 实现文件 (pubsub.c)4.4 使用示例 (main.c) 5. 代码分析5.1 关键设计点5.2 实现特点 6. 编译…

蓝桥杯2023年第十四届省赛真题-异或和之差

题目来自DOTCPP: 思路: 什么是异或和? ①题目要求我们选择两个不相交的子段,我们可以枚举一个分界线i,子段1在 i 的左边, 子段2在 i 的右边,分别找到子段1和子段2的最大值、最小值。 ②怎么确…

Linux作业2——有关文件系统权限的练习

1、创建/www目录,在/www目录下新建name和https目录,在name和https目录下分别创建一个index.html文件,name下面的index.html文件中包含当前主机的主机名,https目录下的index.html文件中包含当前主机的ip地址。 #创建/www目录&…

leeCode 70. 爬楼梯

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n 2 输出:2 解释:有两种方法可以爬到楼顶。 1. 1 阶 1 阶 2. 2 阶 示例 2&#x…

算法题(105):小猫爬山

审题: 本题需要我们找出将n个小猫放在有限重的缆车上运下山所需的最小缆车数 时间复杂度分析:本题的数据量小于等于18,所以我们在做好剪枝的前提下可以使用深度优先搜索解题 思路: 方法一:dfs 搜索策略:将小…

第十六章:Specialization and Overloading_《C++ Templates》notes

Specialization and Overloading 一、模板特化与重载的核心概念二、代码实战与测试用例三、关键知识点总结四、进阶技巧五、实践建议多选题设计题代码测试说明 一、模板特化与重载的核心概念 函数模板重载 (Function Template Overloading) // 基础模板 template<typename…

多协议兼容+高并发处理:EasyCVR如何破解AI安防规模化落地难题?

随着AI技术在安防领域的深入应用&#xff0c;规模化部署面临两大核心挑战&#xff1a;设备协议碎片化导致的接入壁垒与海量视频流并发带来的性能瓶颈。TSINGSEE青犀视频的EasyCVR平台通过“多协议兼容高并发处理”双引擎驱动&#xff0c;结合云边端协同架构与智能算法优化&…

IntelliJ IDEA 中 Git 高频问题与操作详解|新手避坑指南

标签&#xff1a;IntelliJ IDEA Git操作, Git教程, 版本控制, 冲突解决, 分支管理 引言 你是否遇到过这些问题&#xff1f; 代码提交后想撤销怎么办&#xff1f;合并分支时冲突不会解决&#xff1f;不小心把错误代码推送到远程仓库&#xff1f; 本文针对 IntelliJ IDEA 中 Git …

【聊聊层次式架构设计:像搭乐高一样构建软件大厦】

文章目录 聊聊层次式架构设计&#xff1a;像搭乐高一样构建软件大厦理论篇&#xff1a;层次式架构的“千层套路”最底层&#xff1a;基础设施层——默默付出的“基石侠”数据访问层&#xff1a;“数据快递员”业务逻辑层&#xff1a;智慧的“大脑中枢”表示层&#xff1a;软件的…

N列股票收盘价为起点的马科维茨(Markowitz)均值—方差理论

1. 数据准备与收益率计算 输入数据&#xff1a; 假设你有一个矩阵&#xff0c;每一列代表一只股票的历史收盘价序列。每一行对应一个时间点的收盘价。 计算收益率&#xff1a; 马科维茨理论要求使用资产的收益率而非价格。常用的收益率计算方法有对数收益率或简单收益率。 2.…

Conda常用命令汇总(持续更新中)

原文章&#xff1a;安装和使用Miniconda来管理Python环境-CSDN博客 一、Miniconda的使用 Miniconda没有GUI界面&#xff0c;只能通过conda命令对Python环境和软件包进行管理&#xff0c;所以这里主要介绍一下conda的常用命令。 1. Conda相关 (1)查询conda版本 conda --vers…

Redis Cluster 详解

Redis Cluster 详解 1. 为什么需要 Redis Cluster&#xff1f; Redis 作为一个高性能的内存数据库&#xff0c;在单机模式下可能会遇到以下问题&#xff1a; 单机容量受限&#xff1a;Redis 是基于内存存储的&#xff0c;单机的内存资源有限&#xff0c;单实例的 Redis 只能…

利用 MATLAB/Simulink 建立完整的控制系统模型,并进行阶跃响应和负载扰动响应仿真

-利用 MATLAB/Simulink 建立完整的控制系统模型,包括单一控制回路(电流、速度、位置)和整个系统的级联模型 仿真任务包括验证各回路的阶跃响应、负载扰动响应等,确保系统在动态性能上满足设计要求。 以下是在MATLAB/Simulink中建立完整控制系统模型(包含单一控制回路和级联…

python基于spark的心脏病患分类及可视化(源码+lw+部署文档+讲解),源码可白嫖!

摘要 时代在飞速进步&#xff0c;每个行业都在努力发展现在先进技术&#xff0c;通过这些先进的技术来提高自己的水平和优势&#xff0c;汽车数据分析平台当然不能排除在外。本次我所开发的心脏病患分类及可视化系统是在实际应用和软件工程的开发原理之上&#xff0c;运用Pyth…