欢迎光临散文网 会员登陆 & 注册

MinGW + MSVC + CEF 源代码编译 - 1.使用 Python 脚本下载

2022-07-23 16:26 作者:山路旁的辉翎  | 我要投稿

CEF 是基于 Chromium 浏览器项目开发的嵌入式框架,提供了 C / C++ 接口以显示网页。然而,默认提供的 CEF 目前并不支持播放音、视频(如 mp3、mp4 等),因此需要我们手动下载源代码进行编译。

相关工具的版本号(未特殊说明均为 x64 [x86_64]):

  • MinGW-w64 GCC:8.1.0(以下简称 MinGW,注意与过时的 MinGW 区分开)

  • MSVC:14.29.30133(Visual Studio 2019 Version 16.0)

  • Windows 10 SDK:10.0.20348.0(最低 19041)

  • Python:3.8.6

  • CMake:3.21.3

  • Chromium:99.0.4844.84

除了以上内容之外,还需要准备的有(参考编译指南):

  • 至少 8 GB 的内存,推荐 32 GB+(这个 + 是嘲讽我嘛)

  • 90 GB 的硬盘空间,最好是 SSD(不编译 Debug 版本会小一些)

  • 大约 4 h 的 100 Mbps 网络连接(可能更久),2.4 GHz 16 逻辑核的 CPU

  • C++ 桌面开发包(Microsoft.VisualStudio.Workload.NativeDesktop)

  • ATL / MFC 支持组件(Microsoft.VisualStudio.Component.VC.ATLMFC)

  • 要从 Google 服务器下载文件,下略

开始之前想跟大家说的话:

这是我第一次写专栏(貌似也是第一次写 Blog),语言组织可能有些混乱,还望各位多多包涵!

我呢,在库文件编译——甚至 C++ 方面都是纯纯的新手(指系统学习才一年不到),所以经常出现一些幼稚错误,请务必温柔些(

由于我没有网盘,而且 Chromium 更新速度飞快(短短三个月版本号就从 99 跳到了 104),因此我没必要把编译的 CEF 放上来,可能过几个月就 Out of date 了。


看到标题,可能有些人会感到迷惑:为什么要同时安装 MinGW 和 MSVC 呢?事实上,一开始只有 MinGW 一个编译环境,因为 Visual Studio 占用的空间在几年前的我看来实在有点大——当然后来被各种库文件狠狠地打脸了......

言归正传。最近写了个程序练手,某个功能需要显示网页。如果只是发送请求或者获取内容,直接用 socket 或者之前简单封装过的 WinHttp 就好,但渲染网页的话......以后再来探索吧

我第一时间想到了 CEF,毕竟以 Chromium 为基础的框架中最容易上手的就是它了。那为什么不用 Qt 的 WebEngine 呢?原因很简单:我主程序都直接上的 Win32,已经......没法回头了。而且,学习嘛,走点弯路,不寒碜。

下面,就是如何编译 CEF 了。如果不需要添加多媒体支持,可以直接使用官方编译(预构建)的 CEF,这里是下载链接:https://cef-builds.spotifycdn.com/index.html

如果要求显示网页中的音视频呢?那可就有得折腾了。

首先要说明的是,官方提供的 CEF 只需编译 libcef_dll_wrapper,这时在 MinGW 和 MSVC 中二选一即可。

但是源代码编译则需要先用 MSVC 编译 libcef(纯 MinGW?加油,你是最棒的),再用 MinGW / MSVC 编译 libcef_dll_wrapper,此选择取决于主程序的编译方式(不怕麻烦的话请随意)

按照开头准备就绪,我们先下载源代码。下载前新建一个文件夹,这里是 D:\Data\cef_99_0_4844_84(之后均为相对路径)。

从以下网址下载 automate-git.py,保存到上述目录下:

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

然后,从开始菜单中寻找开发者命令行,减少环境变量导致编译出错的可能:

Developer Command Prompt for VS 2019

打开此快捷方式所在位置,右键查看属性,最好手动指定 -arch=amd64 -host_arch=amd64 参数以保证正常编译(虽然最后发现聊胜于无)

手动指定系统架构

打开此快捷方式,输入以下命令:

成功后将显示以下内容:

下载源代码

以上参数可使用 python automate-git.py --help 查询,这里简要介绍一下:

  • --download-dir=. 指定下载目录为当前文件夹

  • --branch=4844 指定下载分支为 4844(可在 https://bitbucket.org/chromiumembedded/cef/wiki/BranchesAndBuilding.md#markdown-header-current-release-branches-supported 查询)

  • --no-build 不进行编译(要改配置)

  • --no-distrib 不进行打包(闪开,咱自己来)

接下来,只要祈祷下载时网络和那啥都给力些即可。总共需要下载的文件数在七十万左右,占用空间大约 60 GB,预计时间一晚上。这里建议没有提示错误时不要随便指定 --force-clean,因为此参数会清除所有下载项,而 src 下载失败通常不影响之前的下载内容。那么不得不重新下载时怎么办呢?优先指定 --force-update(--force-clean 走 git clean -dffx 分支,--force-update 走 gclient revert --nohooks 分支,都很久就是了),希望你用不到这个参数。呜呜呜我的 200 GB 流量......

机械硬盘它做到了!做到个 *,编译就是纯纯的折磨!如果实在没办法全放 SSD 里,至少 chromium 文件夹一定要下载到 SSD,可先使用 mklink /d 命令创建符号链接,需要保证目录结构为 chromium\src

看到以下提示,说明下载完成(大概):

下载(差不多)完成

开个玩笑其实我根本没见过下载完成长什么样......上面是 gclient runhooks 之前的提示。需要注意的是,至少必须完成 DEPS 的 gclient sync(有两个“Syncing projects: 100%, done.”,其中一个上方有 DEPS 字样);如果 gclient runhooks 出错,可在编译前进行解决,这里就不占用篇幅了。

看到其他提示(如下图)时也不要惊慌,重新输入命令进行下载,大部分都能解决问题(实在不行加个 --force-update):

下载寄了 (bushi

下载完成后,顶层目录结构大致如下:

顶层目录结构

接下来就是修改配置,添加多媒体支持了。

MinGW + MSVC + CEF 源代码编译 - 1.使用 Python 脚本下载的评论 (共 条)

分享到微博请遵守国家法律