源码编译CEF(branch=6045)+mp4+mp3笔记

news/2024/11/26 23:35:24/

接触Chromium已经过去多年了,一直都依赖别人编译的库,最近想自己整一个,所以有了这篇笔记。

环境要求:WIN10,内存16G,固态硬盘空间200G+,VS2022,科学上网(具体配置我这边不需要,我直接使用专线电脑跳板的,可以查看一些网页资料)

第一,最重要的告诫:不要有强迫症。

例如遇到 UnicodeDecodeError: 'gbk' codec can't decode byte 0x92 in position 241: illegal multibyte sequence 不要理它,主要编译不中断,啥提示先放一边。我一直想着让这些烦人的消息去掉,结果加了

set PYTHONLEGACYWINDOWSSTDIO=utf8
set PYTHONIOENCODING=utf8
set PYTHONUTF8=1

chcp 65001

然而没啥用,有时候还会自动中断。有人说这个是中文语言配置问题,可能吧。只要你不管它,不影响编译结果。

第二,如果仅仅开mp4,估计配置上就加这样一行代码就够了。


set GN_DEFINES=is_official_build=true proprietary_codecs=true ffmpeg_branding=Chrome chrome_pgo_phase=0 use_thin_lto=false use_jumbo_build=trueset GN_ARGUMENTS=--ide=vs2022 --sln=cef --filters=//cef/*

其中use_thin_lto=false没有的话,debug版本打包不进来,会中断的。chrome_pgo_phase=0如不关闭这个玩意,可能要修改文件,路径在“chromium\src\build\config\compiler\pgo\pgo.gni”,所以建议使用GN_DEFINES搞定。也有人建议is_component_build=false减少编译,我这里没配置,编译好像蛮久的。

第三,遇到out of memory的中断,如果已经是16G内存的,可以重试几次,如果没法解决,建议重启电脑,然后将其他的程序能关的都关了,重试。如果还是不行,可以在我的电脑-》属性-》高级系统设置-》“高级”页面中性能“设置”,将缓存内存也配置成16G,重启后再来一遍。如果是8G内存的,可能有点问题,只能看运气吧,我观察了一下,在最后link的时候内存飙升到16G的。

第四,如果只编译一个版本,例如x64,只需要编译out目录下的“Debug_GN_x64”,“Release_GN_x64”,“Debug_GN_x64_sandbox”,“Release_GN_x64_sandbox”。其中两个sandbox版本用时比较短,可以先编译的。

ninja -j8 -C out\Release_GN_x64_sandbox cef_sandbox
ninja -j8 -C out\Debug_GN_x64_sandbox cef_sandbox

我之前也犯错了,使用“ninja -j8 -C out\Release_GN_x64_sandbox cef”结果一直说找不到std的一些函数,其实“**_sandbox”这些目录一定是给cef_sandbox配置的,不要当它cef编译!

另外就是加-j8代表最多可以并发8个clang-cl.exe编译,最好根据自己的电脑配置一下,如果不填的话,应该是满核运行(例如我的电脑12核,就有12个并发,应该是做了检测的),我建议是:不要满核,可以避免卡住和内存崩掉,当然设置后效率没那么高。

最后将配置发一份

这里有两个文件夹 E:\cef\code\depot_tools (需要配置到Path里面) 和 E:\cef\code\chromium_git

一个文件E:\cef\code\automate\automate-git.py,这个玩意在CEF工程里面的(cef\tools\automate)。

在E:\cef\code\chromium_git下建一个update.bat文件,内容如下:

set GN_DEFINES=is_component_build=false
set GN_DEFINES=is_official_build=true proprietary_codecs=true ffmpeg_branding=Chrome
set GN_ARGUMENTS=--ide=vs2022 --sln=cef --filters=//cef/*
python3 ..\automate\automate-git.py --download-dir=E:\cef\code\chromium_git --depot-tools-dir=E:\cef\code\depot_tools --no-distrib --no-build --branch=6045

运行update.bat之后就是漫长的等待,直到完成,其中的艰辛不提也罢。最终在E:\cef\code\chromium_git 目录下会有两个文件夹 cef,chrome。而chrome/src下必须有cef目录,否则就是没下载完成,需要重新运行update.bat.

代码更新完毕就开始魔改一下。这个可以百度一下。我这里抄个简单的。

在GN运行之前(create,bat), 可以修改build_ffmpeg.py,位置大概在chromium\src\third_party\ffmpeg\chromium\scripts;

  原版:
configure_flags['Chrome'].extend(['--enable-decoder=aac,h264','--enable-demuxer=aac','--enable-parser=aac,h264',])
修改:configure_flags['Chrome'].extend(['--enable-decoder=aac,h264,hevc,mp3,mpeg4,amrnb,amrwb,flv','--enable-demuxer=aac,mp3,mov,avi,amr,flv','--enable-parser=aac,h264,mpegaudio,mpeg4video,h263,hevc',])

貌似这样修改,得到的文件也不支持h265(使用html5test.com测试),如果可以的话,还是在下面的方法配置一下试试(实验时间太久了,我放弃。这个py文件我改了一下,h265可能对应填hevc,可以尝试。)

在GN运行之后(create,bat)只能修改下面两个目录的h文件。

\chromium\src\third_party\ffmpeg\chromium\config\Chrome\win 和\chromium\src\third_party\ffmpeg\chromium\config\Chrome\win-msvc都改了把。

我只对x64说明,其他的一样修改。

x64\config_components.h 将 x64\config.h

其中x64\config.h将注释掉的FFMPEG_CONFIGURATION重新配置一下;x64\config_components.h则将类似CONFIG_MP3_DECODER设置为1

安装官方的说法是在chrome/src/cef下建议create.bat的。我查看了一下,实际上是运行python文件。所以我create.bat改成这样:


set GN_DEFINES=is_official_build=true proprietary_codecs=true ffmpeg_branding=Chrome chrome_pgo_phase=0 use_thin_lto=false use_jumbo_build=true
set GN_ARGUMENTS=--ide=vs2022 --sln=cef --filters=//cef/*#call call cef_create_projects.bat
python3 E:\cef\code\chromium_git\chromium\src\cef\tools\gclient_hook.py

然后放到E:\cef\code\chromium_git运行,不要在cef里面运行。

运行完create.bat后,在\chromium\src\out下面得到8个文件夹,例如“Debug_GN_x64”等。

然后CD到\chromium\src目录下,运行下面代码

ninja -j8 -C out\Release_GN_x64_sandbox cef_sandbox
ninja -j8 -C out\Debug_GN_x64_sandbox cef_sandbox
ninja -j8 -C out\Release_GN_x86_sandbox cef_sandbox
ninja -j8 -C out\Debug_GN_x86_sandbox cef_sandboxninja -j8 -C out/Release_GN_x64 cef
ninja -j8 -C out/Debug_GN_x64 cef
ninja -j8 -C out/Release_GN_x86 cef
ninja -j8 -C out/Debug_GN_x86 cef

Sandbox部分可以优先编译,要一条一条来,没法一次完成,除非独立变成一个bat,然后使用call方法调用。

如果只编译x64,那就挑出一些编译,编译完成后,运行:

set CEF_VCVARS=C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat
python3 E:\cef\code\chromium_git\chromium\src\cef\tools\make_distrib.py --output-dir=E:\cef\code\chromium_git\out\x64 --allow-partial --x64-build --ninja-build

如果是x86,则

set CEF_VCVARS=C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars32.bat
python3 E:\cef\code\chromium_git\chromium\src\cef\tools\make_distrib.py --output-dir=E:\cef\code\chromium_git\out\x86 --allow-partial --ninja-build

最后机器翻译+人工整理了一份MasterBuildQuickStart,可以比对一下我前面的总结 (2023-09-28版)


cef / MasterBuildQuickStart 
https://bitbucket.org/chromiumembedded/cef/wiki/MasterBuildQuickStart#markdown-header-windows-setup此 Wiki 页面提供了使用当前主(开发)分支创建 CEF/Chromium 调试版本的快速入门指南。编辑请注意:未经CEF 论坛或问题跟踪器事先批准而对此 Wiki 页面所做的更改可能会丢失或恢复。概述
文件结构
Windows 设置
Mac OS X 设置
Linux设置
下一步概述
本页面提供了快速入门指南,用于设置最小开发环境并构建 Chromium/CEF 主分支以进行开发。有关可用工具和配置的全面讨论,请访问BranchesAndBuilding Wiki 页面。本指南不适用于:那些寻求在第三方应用程序中使用的预构建二进制发行版的人。去这里吧。
那些寻求以完全自动化的方式构建二进制发行版的人。去这里吧。
开发系统可以使用专用硬件或VMware、Parallels或VirtualBox虚拟机进行配置。除了主分支之外,以下步骤通常可用于开发 CEF/Chromium 的最新版本分支。Chromium 构建要求会随着时间的推移而变化,因此在尝试构建发布分支之前,请先查看BranchesAndBuilding Wiki 页面上列出的构建要求。然后只需添加--branch=XXXX到automate-git.py命令行,其中“XXXX”是您想要构建的分支号。文件结构
所有平台都将使用相同的文件结构。“~”可以是不包含空格或特殊字符的任何路径。我们将在以下部分中为每个平台构建此目录结构。~/code/automate/automate-git.py   <-- CEF build scriptchromium_git/cef/              <-- CEF source checkoutchromium/src/            <-- Chromium source checkoutupdate.[bat|sh]   <-- Bootstrap script for automate-git.pydepot_tools/        <-- Chromium build tools
使用此文件结构,您可以并行开发多个 CEF/Chromium 分支。例如,使用“chromium_git1”而不是“chromium_git”作为目录名称重复以下说明。Windows 设置
需要什么BranchesAndBuilding Wiki 页面上列出的 Windows 构建要求。
按照此处所述安装所需的 Visual Studio 子组件。
安装默认位置中指定的确切 Windows SDK 版本以避免构建问题。
至少 16GB RAM(建议 32GB+)和 150GB 可用磁盘空间(用于调试版本)。
使用快速互联网连接 (100Mbps) 和快速构建机器(2.4Ghz、16 个逻辑核心、SSD)大约需要 4 小时。
分步指南以下所有命令都应使用系统“cmd.exe”运行,而不是使用 Cygwin shell。1. 创建以下目录。c:\code\automate
c:\code\chromium_git
警告:如果更改上述目录名称/位置,请确保 (a) 仅使用 ASCII 字符并 (b) 选择短文件路径(总共少于 35 个字符)。否则,由于文件路径无效或过长,某些工具可能会在构建过程中稍后失败。2. 下载depot_tools.zip(https://chromium.googlesource.com/chromium/tools/depot_tools.git)并解压到“c:\code\depot_tools”。不要使用资源管理器中的拖放或复制粘贴提取,这不会提取隐藏的“.git”文件夹,而该文件夹是 depot_tools 自动更新所需的。不过,您可以从上下文菜单中使用“提取全部...”。7-zip也是一个很好的工具。3. 运行“update_depot_tools.bat”安装Python和Git。cd c:\code\depot_tools
update_depot_tools.bat
4. 将“c:\code\depot_tools”文件夹添加到系统路径中。例如,在 Windows 10 上:运行“系统属性高级”命令。
单击“环境变量...”按钮。
双击“系统变量”下的“路径”以编辑值。5. 将automate-git.py(https://bitbucket.org/chromiumembedded/cef/raw/master/tools/automate/automate-git.py)脚本下载到“c:\code\automate\automate-git.py”。6. 使用以下内容创建“c:\code\chromium_git\update.bat”脚本。set GN_DEFINES=is_component_build=true
set GN_ARGUMENTS=--ide=vs2022 --sln=cef --filters=//cef/*
python3 ..\automate\automate-git.py --download-dir=c:\code\chromium_git --depot-tools-dir=c:\code\depot_tools --no-distrib --no-build
运行“update.bat”脚本并等待 CEF 和 Chromium 源代码下载。CEF源代码将下载到“c:\code\chromium_git\cef”,Chromium源代码将下载到“c:\code\chromium_git\chromium\src”。下载完成后,CEF源代码将被复制到“c:\code\chromium_git\chromium\src\cef”。cd c:\code\chromium_git
update.bat7. 使用以下内容创建“c:\code\chromium_git\chromium\src\cef\create.bat”脚本。set GN_DEFINES=is_component_build=true
set GN_ARGUMENTS=--ide=vs2022 --sln=cef --filters=//cef/*
call cef_create_projects.bat
运行“create.bat”脚本生成 Ninja 和 Visual Studio 项目文件。cd c:\code\chromium_git\chromium\src\cef
create.bat这将生成一个“c:\code\chromium_git\chromium\src\out\Debug_GN_x86\cef.sln”文件,可以在 Visual Studio 中加载该文件以调试和编译单个文件。将此路径中的“x86”替换为“x64”,以使用 64 位构建而不是 32 位构建。始终使用 Ninja 构建完整的项目。如果更改项目配置或在 GN 配置(BUILD.gn 文件)中添加/删除文件,请重复此步骤。8. 使用 Ninja 创建 CEF/Chromium 的调试版本。编辑“c:\code\chromium_git\chromium\src\cef”处的 CEF 源代码,并多次重复此步骤以在开发时执行增量构建。cd c:\code\chromium_git\chromium\src
ninja -C out\Debug_GN_x86 cef将“Debug”替换为“Release”以生成发布版本而不是调试版本。将“x86”替换为“x64”以生成 64 位构建而不是 32 位构建。9. 运行生成的 cefclient 示例应用程序。cd c:\code\chromium_git\chromium\src
out\Debug_GN_x86\cefclient.exe
有关详细的调试说明,请参阅Windows 调试指南。Mac OS X 设置
需要什么BranchesAndBuilding Wiki 页面上列出了 macOS 构建要求。
所有版本都支持在 Intel Mac 上构建。从 M93(4577 分支)开始,支持在 Apple Silicon (ARM64) Mac 上构建。
至少 16GB RAM(建议 32GB+)和 150GB 可用磁盘空间(用于调试版本)。
使用快速互联网连接 (100Mbps) 和快速构建机器(2.4Ghz、16 个逻辑核心、SSD)大约需要 4 小时。
分步指南在此示例中,“~”是“/Users/marshall”。请注意,在某些情况下必须使用绝对路径。本节中描述的环境变量可以添加到“~/.bash_profile”文件中,以在会话中保留它们。1. 创建以下目录。mkdir ~/code
mkdir ~/code/automate
mkdir ~/code/chromium_git2. 使用 Git 下载“~/code/depot_tools”。cd ~/code
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git3. 将“~/code/depot_tools”目录添加到您的 PATH 中。注意这里使用的是绝对路径。export PATH=/Users/marshall/code/depot_tools:$PATH4. 将automate-git.py脚本下载到“~/code/automate/automate-git.py”。5. 使用以下内容创建“~/code/chromium_git/update.sh”脚本。#!/bin/bash
python3 ../automate/automate-git.py --download-dir=/Users/marshall/code/chromium_git --depot-tools-dir=/Users/marshall/code/depot_tools --no-distrib --no-build --x64-build
⚠如果使用 Apple Silicon Mac 而不是 Intel Mac,则替换--x64-build为--arm64-build赋予其可执行权限。cd ~/code/chromium_git
chmod 755 update.sh运行“update.sh”脚本并等待 CEF 和 Chromium 源代码下载。CEF源代码将下载到“~/code/chromium_git/cef”,Chromium源代码将下载到“~/code/chromium_git/chromium/src”。下载完成后,CEF源代码将被复制到“~/code/chromium_git/chromium/src/cef”。cd ~/code/chromium_git
./update.sh6. 运行“~/code/chromium_git/chromium/src/cef/cef_create_projects.sh”脚本创建 Ninja 项目文件。如果更改项目配置或在 GN 配置(BUILD.gn 文件)中添加/删除文件,请重复此步骤。cd ~/code/chromium_git/chromium/src/cef
./cef_create_projects.sh⚠ 如果使用 Apple Silicon Mac 而不是 Intel Mac,请在运行前cef_create_projects.sh添加export GN_DEFINES=is_component_build=true.7. 使用 Ninja 创建 CEF/Chromium 的调试版本。编辑“~/code/chromium_git/chromium/src/cef”中的 CEF 源代码,并多次重复此步骤以在开发时执行增量构建。cd ~/code/chromium_git/chromium/src
ninja -C out/Debug_GN_x64 cef⚠ 如果使用 Apple Silicon Mac 而不是 Intel Mac,请将“x64”替换为“arm64”。将“Debug”替换为“Release”以生成发布版本而不是调试版本。8. 运行生成的 cefclient、cefsimple 和/或 ceftests 示例应用程序。cd ~/code/chromium_git/chromium/src
open out/Debug_GN_x64/cefclient.app
# 或者直接在控制台运行查看日志输出:
./out/Debug_GN_x64/cefclient.app/Contents/MacOS/cefclient有关详细的调试说明,请参阅Mac OS X 调试指南。Linux设置
需要什么BranchesAndBuilding Wiki 页面上列出了 Linux 构建要求。
使用其他版本或发行版构建尚未经过测试,可能会遇到问题。
至少 16GB RAM(推荐 32GB+)和 120GB 可用磁盘空间(用于调试版本)。
使用快速互联网连接 (100Mbps) 和快速构建机器(2.4Ghz、16 个逻辑核心、SSD)大约需要 4 小时。
分步指南在此示例中,“~”是“/home/marshall”。请注意,在某些情况下必须使用绝对路径。本节中描述的环境变量可以添加到“~/.profile”或“~/.bashrc”文件中,以在会话中保留它们。1. 创建以下目录。mkdir ~/code
mkdir ~/code/automate
mkdir ~/code/chromium_git2. 下载并运行“~/code/install-build-deps.py”以安装构建依赖项。对所有问题回答 Y(是)。cd ~/code
sudo apt-get install curl file lsb-release procps python3 python3-pip
curl 'https://chromium.googlesource.com/chromium/src/+/main/build/install-build-deps.py?format=TEXT' | base64 -d > install-build-deps.py
sudo python3 ./install-build-deps.py --no-arm --no-chromeos-fonts --no-nacl
python3 -m pip install dataclasses importlib_metadata3.使用Git下载“~/code/depot_tools”。cd ~/code
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git4. 将“~/code/depot_tools”目录添加到您的 PATH 中。注意这里使用的是绝对路径。export PATH=/home/marshall/code/depot_tools:$PATH5. 下载“~/automate/automate-git.py”脚本。cd ~/code/automate
wget https://bitbucket.org/chromiumembedded/cef/raw/master/tools/automate/automate-git.py6. 使用以下内容创建“~/code/chromium_git/update.sh”脚本。#!/bin/bash
python3 ../automate/automate-git.py --download-dir=/home/marshall/code/chromium_git --depot-tools-dir=/home/marshall/code/depot_tools --no-distrib --no-build赋予其可执行权限。cd ~/code/chromium_git
chmod 755 update.sh运行“update.sh”脚本并等待 CEF 和 Chromium 源代码下载。CEF源代码将下载到“~/code/chromium_git/cef”,Chromium源代码将下载到“~/code/chromium_git/chromium/src”。下载完成后,CEF源代码将被复制到“~/code/chromium_git/chromium/src/cef”。cd ~/code/chromium_git
./update.sh7. 配置GN_DEFINES您所需的构建环境。Chromium 提供sysroot 映像,以实现跨 Linux 发行版的一致构建。作为上述步骤 6 的一部分,必要的文件将自动下载。如果您不想处理由于与本地安装的软件包或内核版本不兼容而导致的潜在构建损坏,建议使用 Chromium 的 sysroot。要使用 sysroot 映像,请配置以下 GN_DEFINES:export GN_DEFINES="use_sysroot=true use_allocator=none symbol_level=1 is_cfi=false use_thin_lto=false"还可以使用本地安装的软件包而不是提供的 sysroot 进行构建。选择此选项可能需要您进行额外的调试工作才能解决由此产生的任何构建错误。在 Ubuntu 18.04 上,以下 GN_DEFINES 已经过测试可靠工作:export GN_DEFINES="use_sysroot=false use_allocator=none symbol_level=1 is_cfi=false use_thin_lto=false use_vaapi=false"
请注意,使用 sysroot 映像时无法直接构建“cefclient”目标。您可以通过在完成下面的步骤 9 后创建二进制发行版,然后使用该二进制发行版构建 cefclient 目标来解决此限制。您还可以创建AddressSanitizer 版本以增强调试功能。只需添加is_asan=true dcheck_always_on=true到上面列出的 GN_DEFINES 并out/Release_GN_x64在下面的步骤 9 中构建目录即可。asan_symbolize.py按照 AddressSanitizer 链接中所述运行脚本以获取符号化输出。列出的其他各种 GN 参数均基于AutomateBuildSetup Wiki 页面的建议。您可以在 Chromium 源代码中按名称搜索它们以查找更多详细信息。8. 运行“~/code/chromium_git/chromium/src/cef/cef_create_projects.sh”脚本创建 Ninja 项目文件。如果更改项目配置或在 GN 配置(BUILD.gn 文件)中添加/删除文件,请重复此步骤。cd ~/code/chromium_git/chromium/src/cef
./cef_create_projects.sh9. 使用 Ninja 创建 CEF/Chromium 的调试版本。编辑位于“~/code/chromium_git/chromium/src/cef”的 CEF 源代码,并多次重复此步骤以在开发时执行增量构建。请注意,步骤 10 可能需要额外的“chrome_sandbox”目标。只有在步骤 7 中进行设置,“cefclient”目标才会成功构建,use_sysroot=false因此如有必要,请删除该目标。cd ~/code/chromium_git/chromium/src
ninja -C out/Debug_GN_x64 cefclient cefsimple ceftests chrome_sandbox
将“Debug”替换为“Release”以生成发布版本而不是调试版本。10.如果您使用的是较旧的内核 (< 3.8),请设置Linux SUID 沙箱。有关 Linux 沙箱技术的更多背景信息,请参阅此处。# This environment variable should be set at all times.
export CHROME_DEVEL_SANDBOX=/usr/local/sbin/chrome-devel-sandbox# This command only needs to be run a single time.
cd ~/code/chromium_git/chromium/src
sudo BUILDTYPE=Debug_GN_x64 ./build/update-linux-sandbox.sh11. 运行 cefclient、cefsimple 和/或 ceftests 示例应用程序。use_sysroot=false请注意,只有在步骤 7 中进行设置后,cefclient 应用程序才会成功构建。cd ~/code/chromium_git/chromium/src
./out/Debug_GN_x64/cefclient有关详细的调试说明,请参阅Linux 调试指南。下一步
如果您正在 Linux 上寻找优秀的代码编辑器,请查看Eclipse和Emacs教程。
查看教程和GeneralUsage Wiki 页面,了解有关 CEF 实施和使用的详细信息。
查看适用于Windows、Mac OS X或Linux的 Chromium 调试指南。
当您准备好将更改贡献回 CEF 项目时,请参阅ContributingWithGit Wiki 页面以获取有关创建拉取请求的说明。
更新2023-09-28

参考链接:

VS2022编译和打包CEF3(+chromium)源码_cef sandbox_o派大猩o的博客-CSDN博客 (windows vs2022 branch=5672)

Linux 编译CEF源码详细记录_cef编译 linux_L-Super的博客-CSDN博客 (linux)

Windows 编译CEF源码详细记录-CSDN博客 (windows 比较详细的问题解决)

cef源码 编译基础_cef源码编译-CSDN博客 (有点旧 vs2017,有些基础知识可以看看)

记录git巨型仓库clone & windows10下cef3编译加入MP3/MP4 branch4389 - 知乎 (更古老一下,参考git的一些用法)

如何编译出cef2623中的cef_sandbox.lib静态库-CSDN博客 (说明了cef_sandbox.lib的合成方向,可以试试)

【精选】Win10下编译cef使其支持H.264、H.265_h264 libcef.dll-CSDN博客 (这里有写h265等修改的,可以试试,我笔记那份忘记从哪里抄来的,没支持h265)

最后的最后是备份,有点瑕疵,不支持h265

一年有效(至2024-11-22)
cef_binary_119.4.3+gc76a3b9+chromium-119.0.6045.159_windows32.zip
链接:https://pan.baidu.com/s/1kReLZicezcTxy9ILtMxk9g 
提取码:y6wq 

cef_binary_119.4.3+gc76a3b9+chromium-119.0.6045.159_windows32_debug_symbols.zip
链接:https://pan.baidu.com/s/1Mqkmze3IuYLo2Y1OZ55X2A 
提取码:0dp7 

cef_binary_119.4.3+gc76a3b9+chromium-119.0.6045.159_windows32_release_symbols.zip
链接:https://pan.baidu.com/s/1hJPA6zyI2ZAl67QUHAnGIA 
提取码:2u79 

cef_binary_119.4.3+gc76a3b9+chromium-119.0.6045.159_windows64.zip
链接:https://pan.baidu.com/s/1GoyCR6u3_0jv98UfiyL9vw 
提取码:uc49 

cef_binary_119.4.3+gc76a3b9+chromium-119.0.6045.159_windows64_debug_symbols.zip
链接:https://pan.baidu.com/s/1qipF9Si5cto55Iuhsf6Xmg 
提取码:lu2d 

cef_binary_119.4.3+gc76a3b9+chromium-119.0.6045.159_windows64_debug_symbols.zip
链接:https://pan.baidu.com/s/1KQGu92vKhM7vOoYi9Q7BOA 
提取码:hvqp 
 


http://www.ppmy.cn/news/1236536.html

相关文章

js 获取地址栏参数 封装方法

下面是一个 JavaScript 函数&#xff0c;用于获取 URL 中的参数并以对象形式返回&#xff1a; //获取地址栏参数(返回对象)function getUrlParams() {var urlParams {};var queryString window.location.search;if (queryString) {queryString queryString.replace(/^\?/,…

10个容易被忽视的FastAPI实用功能

大家好&#xff0c;FastAPI是一种现代、高性能的Python Web框架&#xff0c;用于构建Web应用程序和API。它基于Python的异步编程库asyncio和await语法&#xff0c;以及类型注解和自动文档生成等特性&#xff0c;提供了快速、易用和可靠的开发体验&#xff0c;接下来本文将介绍1…

Quartz .Net 的简单使用

参考了&#xff1a;c# .net framework 4.5.2 , Quartz.NET 3.0.7 - runliuv - 博客园 (cnblogs.com) https://www.cnblogs.com/personblog/p/11277527.html&#xff0c; Quartz.NET 作业调度&#xff08;一&#xff09;&#xff1a;Test - 简书 自己要轮询的任务&#xff1a…

完美解决:yum -y install nginx 报出 没有可用软件包 nginx。错误:无须任何处理

目录 一、问题&#xff1a; 二、原因&#xff1a; 三、解决方法&#xff1a; 一、问题&#xff1a; [rootlocalhost ~]# yum -y install nginx 已加载插件&#xff1a;fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.bfsu.edu.cn * extras: m…

Nodejs JavaScript 字符串加密

情景 问题的场景是这样的&#xff1a;我们需要在浏览器cookie中存储用户名&#xff0c;但又不想直接明文存储&#xff0c;所以对它进行了简单的加密存储。 因为是简单的加密&#xff0c;目的只是不希望明文存储。我们使用了Base64 编码&#xff0c;使得cookie里的存储不可只读…

Laravel 安装(笔记一)

目录 第一步、Laravel 一般使用 composer安装 第二步、使用composer安装项目 第三步、配置环境 第四步、访问域名&#xff0c;安装完成 Laravel 官网 l​​​​​​​Installation - Laravel 中文网 为 Web 工匠创造的 PHP 框架 第一步、Laravel 一般使用 composer安装 如…

【Exception】Error: Dynamic require of “path“ is not supported

Talk is cheap, show me the code. 环境 | Environment kversionOSwindows 11Node.jsv18.14.2npm9.5.0vite5.0.0vue3.3.8 报错日志 | Error log >npm run dev> app10.0.0 dev > viteERROR failed to load config from C:\code\frontend\app1\vite.config.js …

Docker start/stop/restart 命令

docker start&#xff1a;启动一个或多个已经被停止的容器。 docker stop&#xff1a;停止一个运行中的容器。 docker restart&#xff1a;重启容器。 语法 docker start [OPTIONS] CONTAINER [CONTAINER...]docker stop [OPTIONS] CONTAINER [CONTAINER...]docker restart…