高级 CEF 内核集成与 VC++——开发环境搭建与配置

开发环境的搭建是 CEF 浏览器开发中至关重要的一步。正确配置开发环境不仅能提高开发效率,也能确保开发过程中的稳定性与可靠性。本文将结合最新的资料和技术方案,深入讲解如何搭建 CEF 编译与配置环境,正确配置 Windows SDK 与依赖库,以及如何配置和调试 VC++ 项目。

1. CEF 编译与配置:如何使用 CMake 编译 CEF,配置 VC++ 项目

CEF (Chromium Embedded Framework) 是一个基于 Chromium 的开源项目,用于将 Chromium 的浏览器功能嵌入到桌面应用程序中。CEF 编译与配置的过程较为复杂,尤其是在 Windows 环境下。开发者需要准备编译工具链、相关依赖库,并通过 CMake 配置生成 VC++ 项目文件。下面将详细介绍这一过程。

1.1 下载 CEF 源代码

首先,需要从 CEF 官方网站或 GitHub 仓库下载 CEF 的源代码。下载的方式有两种:

  • 使用 Git:从 CEF 官方 GitHub 仓库中克隆源码,git clone 命令可以帮助你下载 CEF 的源代码。
  • 使用 CEF Binary:如果不需要修改 CEF 内核源码,可以直接下载预编译的二进制包。

推荐使用 CEF_binary,即已编译好的版本,避免了编译过程中繁琐的设置。对于需要修改 CEF 内核的开发者,可以通过源代码进行定制和编译。

1.2 CEF 编译准备
  1. 安装 Visual Studio 和 Windows SDK:为了编译 CEF,需要确保已安装正确版本的 Visual Studio 和 Windows SDK。推荐使用 Visual Studio 2019 或更高版本,搭配 Windows 10 SDK。

  2. 安装 CMake:CMake 是跨平台的自动化构建系统,用于生成构建文件。在 Windows 环境下使用 CMake 来配置 CEF 项目是一个标准做法。

  3. 下载依赖库:CEF 依赖于多种库,包括:

    • Google’s V8 引擎(JavaScript 引擎)
    • WebKit(布局引擎)
    • Chromium(基础浏览器框架)

    在 CEF 编译过程中,CMake 会自动下载这些依赖库,或根据配置提示下载。

1.3 配置 CEF 编译环境

通过 CMake 配置 CEF 编译环境,步骤如下:

  1. 创建构建目录: 在下载并解压 CEF 源代码之后,建议在一个新的目录中创建构建文件夹。例如,cef_build

  2. 配置 CMake: 在 CMake 配置工具中,选择 cef 源代码目录,并选择目标编译目录(即 cef_build)。根据需要设置平台和编译选项:

    cmake -G "Visual Studio 16 2019" -A x64 -D CEF_USE_GN=TRUE -D CEF_INCLUDE_GN=TRUE ..

    参数说明

    • -G:指定编译器生成器,这里我们使用 Visual Studio 2019。
    • -A x64:指定构建 64 位平台。
    • -D CEF_USE_GN=TRUE:启用 GN(Google's Ninja Build System)。
    • -D CEF_INCLUDE_GN=TRUE:包含 GN 配置文件。
  3. 生成 Visual Studio 项目文件: 在 CMake 配置完成后,生成 Visual Studio 项目文件,进入构建目录并执行:

    cmake --build . --config Release
  4. 编译 CEF: 完成 CMake 配置后,打开 Visual Studio,并通过 Release 配置编译整个 CEF 项目。这一过程可能需要较长时间,取决于你的硬件配置。

1.4 配置 VC++ 项目

在编译 CEF 成功后,你需要将 CEF 与 VC++ 主程序进行集成。VC++ 项目通常使用 Visual Studio 开发,可以通过以下步骤将 CEF 引入主程序:

  1. 设置 CEF 依赖库: 在 VC++ 项目中,需要链接到 CEF 编译后的依赖库文件。你需要将 CEF 的 libcef.lib 文件添加到 VC++ 项目中的链接器设置中。

  2. 配置头文件路径: 在 VC++ 项目中,添加 CEF 源代码的头文件路径,确保 CEF 的 API 可以被正确引用。

  3. 初始化 CEF 环境: 在主程序的入口点(mainWinMain)中,初始化 CEF 库:

    CefMainArgs main_args(hInstance);
    CefRefPtr<MyApp> app = new MyApp();
    CefSettings settings;
    CefInitialize(main_args, settings, app.get(), nullptr);

    这段代码会初始化 CEF 环境,并设置应用程序的运行参数。

  4. 编写交互代码: 在主程序中,需要编写与 CEF 内核交互的代码,例如创建浏览器窗口、加载网页内容等。

2. Windows SDK 和依赖库:确保使用正确版本的 SDK、依赖项配置与解决方案创建
2.1 选择合适的 Windows SDK

Windows SDK(Software Development Kit)是开发 Windows 应用程序所必需的工具集。CEF 对 SDK 版本有一定要求,特别是在 Windows 7 及更高版本的支持上,建议使用 Windows 10 SDK 及以上版本。

  1. Windows 10 SDK:是目前最新的 SDK,包含了对 Windows 10 系统功能的支持。它支持 UWP(通用 Windows 平台)、Win32 API、DirectX 等开发需求。

  2. Windows 8.1 SDK:在一些老旧项目中,可能需要使用 Windows 8.1 SDK,特别是为了支持 Windows 7 操作系统的兼容性。

  3. Windows 7 SDK:如果你需要支持较旧的操作系统,可以使用 Windows 7 SDK。CEF 可以支持 Windows 7 及以上版本,但需要确保编译环境正确配置。

2.2 配置依赖项

CEF 编译时需要依赖多个库,以下是一些常见的依赖库:

  • V8 引擎:JavaScript 引擎,必须在 CEF 配置中指定。
  • WebKit:布局引擎,负责处理 HTML 和 CSS 渲染。
  • Skia:图形渲染库,用于图形绘制。
  • ICU:用于国际化和字符集处理。

在 CMake 配置时,必须确保这些依赖项能正确下载和配置。一般情况下,CEF 会自动下载依赖库,但在一些特定情况下(如代理网络或定制化需求),开发者可能需要手动配置这些库。

2.3 解决方案创建

确保你的 VC++ 项目能够正确与 CEF 构建生成的库和头文件链接。通常,VC++ 项目需要设置以下内容:

  1. 设置库路径: 在 VC++ 项目中,确保 CEF 的 lib 目录被加入到库路径中。

  2. 链接 CEF 库文件: 在项目的链接设置中,添加 libcef.lib 和其他必要的 CEF 依赖库。

  3. 设置预编译头文件: 为了提高编译效率,设置 CEF 和 VC++ 项目的预编译头文件,避免重复编译同样的代码。

3. IDE 配置与调试工具:Visual Studio 配置与调试,CEF 与 VC++ 的协同调试
3.1 配置 Visual Studio

Visual Studio 是最常用的 Windows 开发 IDE,可以通过以下步骤来配置和调试 CEF 项目:

  1. 安装 Visual Studio: 确保安装了 Visual Studio 的 C++ 开发工具和调试工具。推荐使用 Visual Studio 2019 或更高版本。

  2. 安装 CMake 插件: 如果使用 CMake 构建 CEF,确保在 Visual Studio 中安装了 CMake 插件,以便通过 Visual Studio 直接管理和编译 CMake 项目。

  3. 配置调试器: 在 Visual Studio 中,可以使用 Attach to Process 功能来进行调试。CEF 采用多进程架构,因此你需要同时调试主进程和渲染进程。可以在 Visual Studio 中通过选择进程 ID 来附加到正确的进程。

3.2 CEF 与 VC++ 协同调试

在 CEF 开发中,调试主进程和渲染进程非常重要。Visual Studio 提供了强大的调试功能,可以同时调试多个进程。

  1. 主进程调试: 使用 Visual Studio 的调试工具(如断点、内存查看器等)来调试主进程中的代码。通过 Attach to Process,选择主程序进程进行调试。

  2. 渲染进程调试: CEF 在默认情况下会启动多个渲染进程来处理浏览器内容。可以在 Visual Studio 中附加到渲染进程,使用多线程调试功能来查看渲染过程中的问题。

  3. 调试 Web 内容: 使用 CEF 提供的内置 Web 调试工具,例如 DevTools(Chromium Developer Tools),可以调试嵌入在应用程序中的网页内容。


通过上述详细的开发环境搭建和配置,开发者可以顺利地在 Windows 平台上搭建并开发基于 CEF 的浏览器应用程序。这一过程涵盖了从 CEF 编译与配置到 Visual Studio 调试的各个环节,提供了一个全面的解决方案,确保开发者能够在实际开发中高效、顺利地进行工作。

关于作者:

15年物联网开发、带过10-20人的团队,多次帮助公司从0到1完成项目开发,在TX等大厂都工作过。当下为退役状态,写此篇文章属个人爱好。本人10多年开发经验期间手机了很多开发课程等资料,需要可联系我

 

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【React】组件通讯有哪几种方式?

文章目录 一、父子组件通讯二、兄弟组件通讯3、context 跨级组件通讯 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、父子组件通讯 父组件 ----> 子组件&#xff1a; props 父组件提供要传递的 state 数据 给子组件标签添加属性&#xff0c;值…

huggingface-cli下载数据(含下载指定数据教程)

在国内&#xff0c;推荐使用&#xff1a;HF-Mirror 1.尝试下载大模型相关文件 在huggingface镜像首页&#xff0c;可以看到如图&#xff1a; 2.使用huggingface-cli下载文件 2.1 首先激活自己的虚拟环境&#xff0c;然后安装环境&#xff0c;使用如下命令&#xff1a; pip …

生产慎用之调试日志对空间矢量数据批量插入的性能影响-以MybatisPlus为例

目录 前言 一、一些缘由 1、性能分析 二、插入方式调整 1、批量插入的实现 2、MP的批量插入实现 3、日志的配置 三、默认处理方式 1、基础程序代码 2、执行情况 四、提升调试日志等级 1、在logback中进行设置 2、提升后的效果 五、总结 前言 在现代软件开发中&…

Linux下编译安装METIS

本文记录Linux下编译安装METIS的流程。 零、环境 操作系统Ubuntu 22.04.4 LTSVS Code1.92.1Git2.34.1GCC11.4.0CMake3.22.1 一、安装依赖 1.1 下载GKlib sudo apt-get install build-essential sudo apt-get install cmake 2.2 编译安装GKlib 下载GKlib代码&#xff0c; …

数据链路层总结

- - 链路、物理链路&#xff1a;两节点间物理线路&#xff08;有线、无线&#xff09;&#xff0c;中间没有任何其他的交换节点 数据链路、逻辑链路&#xff1a; 链路 协议需要的硬件、软件 网络适配器(网卡)&#xff1a;包含物理层、数据链路层 网络适配器软件驱动程…

基于Java和Vue开发的漫画阅读软件漫画阅读小程序漫画APP

前景分析 受众广泛&#xff1a;漫画的受众群体广泛&#xff0c;不仅限于青少年&#xff0c;还涵盖了成年人等多个年龄层和社会阶层。漫画文化在全球范围内的影响力不断扩大&#xff0c;未来漫画软件创业可以考虑全球市场的拓展。 市场需求大&#xff1a;数字化阅读趋势下&…

LoRa无线空调计费系统都应用在哪里

中央空调计费系统由于布线方式需要消耗大量的人力及成本&#xff0c;LoRa在楼宇自控及智能家居中的应用越来越广泛&#xff0c;成为当前普遍应用的通信技术。 LoRa模块无线传输技术的不断完善&#xff0c;逐步解决了温控器通信方面布线困难、施工成本高的问题&#xff0c;促进…

4.STM32通信接口之SPI通信---硬件SPI的介绍

上一节&#xff0c;我们学会软件的SPI&#xff0c;本节&#xff0c;我们将学习STM32的SPI硬件收发电路&#xff0c;虽然STM32的硬件收发电路很强大&#xff0c;但是&#xff0c;很多我们都用不到&#xff0c;我们只需会最基本的就可以。硬件的好处就是稳定&#xff0c;功能模块…

Open AI 推出 ChatGPT Pro

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

洛谷P1030 [NOIP2001 普及组] 求先序排列(c嘎嘎)

题目链接&#xff1a;P1030 [NOIP2001 普及组] 求先序排列 - 洛谷 | 计算机科学教育新生态 题目难度&#xff1a;普及 解题思路&#xff1a;这道题和之前做过的一道题很像&#xff0c;举一反三就行 相似题目&#xff1a;P1827 [USACO3.4] 美国血统 American Heritage - 洛谷 |…

创意型广告如何配音梨花声音研修院退费

张弛播音5天训练营靠谱吗&#xff0c;在当今竞争激烈的广告市场中&#xff0c;创意型广告以其独特的构思和表现形式脱颖而出。而配音作为广告的重要组成部分&#xff0c;对于创意型广告的成功起着至关重要的作用。 在为创意型广告配音之前&#xff0c;首先要深入理解广告的创意…

探索 Python 应用的分层依赖:解决 UOS 环境中的 libvirt-python 安装问题

探索 Python 应用的分层依赖&#xff1a;解决 UOS 环境中的 libvirt-python 安装问题 背景Python 版本升级 问题描述原因分析与解决方案 Python 应用的分层依赖&#xff1a;安装与部署的视角libvirt-python的分层依赖尝试的解决方案 使用编译好的 .whl 文件"嫁接"整个…

SpringBoot+ENC实现密钥加密及使用原理

?? 作者&#xff1a; ?? 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 ?? 社区&#xff1a; Java技术栈交流 ?? 主题&#xff1a; SpringBootENC实现密钥加密及使用原理 创作时间&#xff1a; 2024年06月23日 目录 前言1、整合SpringBoot 1.1、POM…

多源多汇流网络的等价转换与证明

多源多汇流网络的等价转换与证明 引言流的性质和定义推广转换方法等价性证明伪代码与C代码实现结论引言 在经典的流网络问题中,我们通常考虑的是单源单汇(即一个源节点和一个汇节点)的网络流。然而,在实际应用中,我们经常会遇到具有多个源节点和多个汇节点的情况。本文将…

如何制作“优美”PPT

目录 1.免费PPT模板网站&#xff1a; 2.免费有较好质量的图片网站&#xff1a; 免费图片资源 免费透明PNG图片资源&#xff1a; 免费icon图片资源&#xff1a; 3.选择好的图片&#xff1a; 图片底色 4.要与不要 千万不要&#xff1a; 一定要&#xff1a; 6.一些建议…

R中利用ggplot2绘制气泡图

闲来无事&#xff0c;整理了一下自己的绘图笔记&#xff0c;顺便分享到CSDN上。 一、介绍 气泡图&#xff08;Bubble Plot&#xff09;是一种常用的数据可视化方法&#xff0c;用于展示三个变量之间的关系。气泡图的特点是通过气泡的大小、颜色和位置来表达数据中的多维信息。…

腾讯新版滑块识别/滑块识别

最新的腾讯滑块也是进行了一小部分更新&#xff0c;滑块也变的非常千奇百怪。 之前写的处理图像的方法可能太粗糙&#xff0c;有的背景图无法识别&#xff0c;可以在模板匹配之前&#xff0c;加个图像处理。 with open(f"./img/sprite_{random_num}.png", "rb&…

Oracle系统性能监控工具oswatcher演示

1、关于 OSW OSWatcher 的使用符合 Oracle 的标准许可条款&#xff0c;并且不需要额外的许可即可使用&#xff01;&#xff01;&#xff01;&#xff01; OSWatcher (oswbb) 是一种 UNIX shell 脚本的集合&#xff0c;主要用于收集和归档操作系统和网络的度量&#xff0c;以便…

PowerShell install 一键部署postgres17

postgres 前言 PostgreSQL 是一个功能强大的开源对象关系数据库系统,拥有超过 35 年的积极开发经验 这为其赢得了可靠性、功能稳健性和性能的良好声誉。 通过官方文档可以找到大量描述如何安装和使用 PostgreSQL 的信息。 开源社区提供了许多有用的地方来熟悉PostgreSQL, 了…

Elasticsearch vs 向量数据库:寻找最佳混合检索方案

图片来自Shutterstock上的Bakhtiar Zein 多年来&#xff0c;以Elasticsearch为代表的基于全文检索的搜索方案&#xff0c;一直是搜索和推荐引擎等信息检索系统的默认选择。但传统的全文搜索只能提供基于关键字匹配的精确结果&#xff0c;例如找到包含特殊名词“Python3.9”的文…