【2024-12】VS2022 编译 Chromium浏览器源码坑点汇总

背景

探索浏览器参数开发时,发现第一步 Chromium 源码编译这块就坑点很多,这里统一记录下,以便未来碰到类似的 Visual Studio 编译时,会遇到同样的问题。

据说Electron源码编译大致相同,如果想从源码角度来修改Electron中的Chromium的话,掌握Chromium源码编译也是有点用的,Chromium中有些参数的微调以及收发数据的调整等。

遇到问题的关键点,主要还是对于 VS IDE 的不熟练,以及对 C++相关知识的欠缺导致。

基于 B 站 Up 主的这个 Chromium 源码编译视频合集进行整理

浏览器内核开发 - 编译流程(3)_哔哩哔哩_bilibili

Visual Studio 的注意事项(expected Clang 17.0.0)

  1. B 站视频 给了 VS2022 版本,但是录制时间是 2023 年,这期间 VS2022 可能又改动了什么(更新了MSVC 因为 UP 主早期将版本固定起来,所以没有受到影响),导致编译过程极其不顺畅,所以选择使用 VS2019,可以避免 clang 版本编译时,需要 17 或者更高版本的提示

    1. 一般人直接下载 VS2022 版本下来,基本上都会碰到这个问题

static assertion failed: error STL1000: Unexpected compiler version, expected Clang 17.0.0 or newer

  1. 看 CSDN 上面的MSVC设置版本_如何修改msvc版本-CSDN博客,MSVC 是可以更改的,理论上说也必须可以更改,否则还让下载下来干嘛,下面是 CSDN 的更改教程,深入了解后,发现这里更改可能并不影响 Chromuim 中的 MSVC 的取用,在 chrome.vcxproj (everything 搜索,因为文件特别多,要反复让 everything 重建索引,否则搜不到)有一段配置,这里指定了 MSVC 的版本号

  <PropertyGroup Label="Locals">
    <PlatformToolset>v142</PlatformToolset>
  </PropertyGroup>
  1. 另外通过图形界面项目(不是文件夹)右键——属性——配置属性——常用,这里也可以选择,但是是否影响项目的配置文件

你改这里不会影响 chrome.vcxproj 文件,应该是没有用的,这里应该是 VS 自己创建项目时有用吗?

说说 MSVC 是什么?

  1. MSVC 就是微软 VC++编译器的简写,微软通过这个编译器编译 C++代码

  2. Clang 也是一个 C++编译器,只不过是一个建立 在 Windows,Mac,Linux 编译器之上的第一个调度器,类似于你 jquery 的概念,只要你按照 Clang 的编译器要求编写代码,那么在将代码移植到其他操作系统上时,Clang 就会调用具体操作系统的 C++引擎来进行编译,也即 Clang 还是会调用 MSVC 的代码来进行 CXX 代码的编译

  3. 所以当 MSVC 版本较高时,Clang 版本较低时,Clang 执行 MSVC 代码时就会提示上述expected Clang 17.0.0 or newer, 此时就要降级 MSVC

更改 Windows Kits (SDK) / VS2022 安装路径

vs2022 如果你不是选择默认安装路径,那么你改一下,gn gen 这里就会报 WINDOWSSDKDIR 找不到的问题,所以一上来习惯更改 VS2022 的人必须遇到这个坑,且很二逼的是,你想再装默认路径,好像就没机会了,必须通过删除注册表来修改(这个够呛)

gn gen --ide=vs2019 --winsdk="10.0.19041.0" out/chromium_debug_x86 --args="is_debug = true is_component_build = true enable_nacl = false target_cpu = \"x86\" proprietary_codecs = true ffmpeg_branding = \"Chrome\""

CSDN 删除注册表:解决安装Visual Studio 2022中共享工具、组件和SDK的路径无法修改的问题_vs共享组件工具sdk路径不可改-CSDN博客

如果你比较倔强,那也可以,那就在环境变量中自己配置,之后所有的 WINDOWSSDK 都会下载到这个目录里

你可以从官方链接下载具体的 SDK,安装时一旦你更改了安装目录(这里还会自动检测 C 盘空间不够时,直接给你找个最大的目录,后绪你还改不了了,也得注册表改)

运行 regedit 打开注册表。
找到 Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows Kits\Installed Roots 并选中。如果不存在则需要手动创建。
修改 KitsRoot10 为你期望的路径。如果存在多个类似字段则都需要修改。
从 Windows 官网下载 Windows SDK 安装器。
打开安装器安装 Windows SDK,此时的默认安装路径应为注册表中修改后的路径。
安装完毕后建议删除旧的 SDK。
执行 Rust 命令确认能否正常操作。

ninja.exe 不存在

  1. depot_tools 工具包,一旦你 gclient 之后,ninja.exe 就消失了,然后启动生成的时候,第一个看到的就是 ninja.exe 不存在,这个工具包好像还不能乱升级,否则会报一个 ninja.py 的错误,这个错误没有其他办法,删了所有 depot_tools 重新再来一遍升级,瞎搞没用

depot_tools/ninja.py: Could not find Ninja in the third_party of
  1. ninja.exe Chromium 源码下面的这个就可以用

路径错误

ValueError: path is on mount '\\\\tab_group_types.mojom-webui.js', start on mount 'E:'

还好有大佬给了解决方案,要追加一行代码(真不是一般人能想到的),这时候项目应该能编译起来了

讲讲为何使用的是 Chromium 源码中的 Clang 版本?

  1. 首先自己的代码自己解释,你必须要用 Chromium 中的 Clang,这个代码是用 ninja.exe 构建的,使用的 build.ninja 配置,这个配置里面有个 toolchain.ninja 配置,你如果想改这个 Clang 必须在 toolchain.ninja 中修改,但是基本改不了,否则 Chromium 跑不过去,我一开始因为 Clang 17 or newer 就把 Clang18 替换了这里的位置,结果报新的语法错误。

你可以全部编译通过,但是调试时提示不是 win32 应用程序,哈哈!

继续探索中....

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

森叶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值