v8引擎编译过程记录(保姆级教程)2023.7.22

在windows下使用vs2022编译v8引擎的稳定版本(2023.7.22)

一开始我是参考:https://blog.csdn.net/qq_33958297/article/details/105331502,因为百度上一搜就是它

但是那篇博客讲得很迷,跟着做没有成功。后面踩坑无数,查了一大堆资料才总结出这套稳定可用的方法,希望能帮到后人。

这篇文章我在博客园、知乎也有同步发布。

0.环境配置

1.安装了在环境变量里面的Python310和Git,点我访问相关博客

2.安装有VS2022(可能需要安装上使用C++的桌面开发通用Windows平台开发)

1.下载v8项目源代码

V8已经停止在官方网站发布博客来公布最新稳定版本

我们需要访问谷歌的分支详情页

https://chromiumdash.appspot.com/branches

v8引擎编译过程记录(保姆级教程)2023.7.22_第1张图片

我选择了一年前的104版本

v8引擎编译过程记录(保姆级教程)2023.7.22_第2张图片

记下对应的v8版本,10.4-lkgr

找到一个合适的地方创建空文件夹v8,打开cmd,设定工作目录到v8文件夹

v8引擎编译过程记录(保姆级教程)2023.7.22_第3张图片

运行命令配置代理,根据代理工具的端口修改

git config --global http.proxy http://127.0.0.1:61021
git config --global https.proxy http://127.0.0.1:61021
netsh winhttp set proxy 127.0.0.1:61021
set HTTP_PROXY=http://127.0.0.1:61021
set HTTPS_PROXY=http://127.0.0.1:61021

仅仅运行上面的命令是不够的,还需要去系统设置或代理工具里面设置系统全局代理,也就是设置->网络和Internet->代理里面的代理

保持cmd窗口和代理程序不关闭,进入下一步

2.下载开发工具

访问

https://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html#_setting_up

找到Download链接下载包

v8引擎编译过程记录(保姆级教程)2023.7.22_第4张图片

新建一个depot_tools文件夹解压压缩包,然后把文件夹路径添加到PATH环境变量里面

需要确保Python已经安装,并且Python的安装目录在环境变量里面

v8引擎编译过程记录(保姆级教程)2023.7.22_第5张图片

注意:depot_tools要在所有其它路径之前。

3.下载配置项目

我们回到设置了代理的那个cmd窗口

如果你不小心关闭了,需要重新运行上面的命令设置代理

我们先设置一个环境变量,不然谷歌的工具不会下载Windows相关的工具

set DEPOT_TOOLS_WIN_TOOLCHAIN=0

确保你的代理设置完毕,在cmd运行以下命令拉取源代码

fetch v8

拉取比较费时间,哪怕你的代理能到10MB/s也要几分钟才能拉取完

如果你注意到进度一直都没动,说明可能你的PATH环境变量有问题
确保depot_tools在所有其它路径之前,然后重启Windows系统,再设置代理和set DEPOT_TOOLS_WIN_TOOLCHAIN=0,重新运行fetch v8拉取代码
(注意:关机再开机不等于重启)

拉取代码完成后,我们可以看到它在我们的v8文件夹里面又创建了一个v8文件夹

v8引擎编译过程记录(保姆级教程)2023.7.22_第6张图片

所以说先进入v8文件夹

cd v8

接着检出我们记录的10.4-lkgr版本

git checkout 10.4-lkgr

然后再次确保你的代理设置完毕,并且确保你的cmd执行过开头的环境变量设置命令,运行以下命令完成依赖处理

gclient sync -v

这一步可能会下载一些依赖,没有看到报错就说明成功了,我们进入下一步

如果这一步报错,八成是忘记了设置环境变量set DEPOT_TOOLS_WIN_TOOLCHAIN=0

4.编译安装ninja

找一个合适的地方,然后git克隆ninja项目,我是直接在E盘根目录搞

git clone https://github.com/ninja-build/ninja.git

v8引擎编译过程记录(保姆级教程)2023.7.22_第7张图片

然后进入ninja项目文件夹,调用git检出release

cd ninja
git checkout release

接下来打开vs的开发人员命令提示符Developer Command Prompt for VS 2022

v8引擎编译过程记录(保姆级教程)2023.7.22_第8张图片

如下图,进入ninja项目文件夹,运行下面的命令编译ninja

python configure.py --bootstrap

v8引擎编译过程记录(保姆级教程)2023.7.22_第9张图片

运行完成后就能看到ninja.exe在ninja项目文件夹里面

直接把它移动到之前下载解压的depot_tools目录下

v8引擎编译过程记录(保姆级教程)2023.7.22_第10张图片

5.编译v8 x64 release动态库

我们回到cmd窗口,先cd到v8\v8文件夹下

图片

现在我们不需要代理,先去关闭系统全局代理,然后运行下面的命令关闭git和命令行的代理

git config --global --unset http.proxy
git config --global --unset https.proxy
netsh winhttp reset proxy
set HTTP_PROXY=
set HTTPS_PROXY=

再次设置环境变量,防止自己不小心关闭cmd窗口忘记了设置

set DEPOT_TOOLS_WIN_TOOLCHAIN=0

设置编译信息,动态库编译模式

python3 tools\dev\v8gen.py x64.release -vv -- is_component_build=true v8_static_library=false

我们可以看到报错了

v8引擎编译过程记录(保姆级教程)2023.7.22_第11张图片

提示You must install Windows 10 SDK version 10.0.20348.0 including the "Debugging Tools for Windows" feature.

所以说我们需要安装Windows 10 SDK,打开Visual Studio Installer

v8引擎编译过程记录(保姆级教程)2023.7.22_第12张图片

点击修改

v8引擎编译过程记录(保姆级教程)2023.7.22_第13张图片

选择单个组件,搜索Windows 10 SDK,勾上报错信息提示的版本,点击修改

如果你这里已经是勾上的,那么直接关闭Visual Studio Installer,进入下一步

v8引擎编译过程记录(保姆级教程)2023.7.22_第14张图片

完成后关闭Visual Studio Installer,在Windows搜索栏搜索添加或者删除程序

v8引擎编译过程记录(保姆级教程)2023.7.22_第15张图片

搜索Windows Software Development Kit.找到我们的版本,点击修改

v8引擎编译过程记录(保姆级教程)2023.7.22_第16张图片

选择Change,然后点击Next

v8引擎编译过程记录(保姆级教程)2023.7.22_第17张图片

勾上Debugging Tools for Windows,点击Change

v8引擎编译过程记录(保姆级教程)2023.7.22_第18张图片

完成后关闭窗口,回到cmd窗口,重新生成编译配置

python3 tools\dev\v8gen.py x64.release -vv -- is_component_build=true v8_static_library=false

配置生成成功了

v8引擎编译过程记录(保姆级教程)2023.7.22_第19张图片

使用ninja编译

ninja -C out.gn\x64.release

然后这个过程CPU会吃满,最好不要干其它事情。

跑完要个十几分钟,耐心等待。

图片

跑完后我们进入v8\v8\out.gn\x64.release\文件夹

往下翻能找到d8.exe,打开看看正不正常

v8引擎编译过程记录(保姆级教程)2023.7.22_第20张图片

图片

随便输入一串js代码看看结果

console.log("test"+4*8),5*7;

v8引擎编译过程记录(保姆级教程)2023.7.22_第21张图片

输出test32,返回35,说明编译的很成功

在别的地方创建个文件夹,先复制出运行时:

d8.exe
icudtl.dat
icui18n.dll
icuuc.dll
libc++.dll
snapshot_blob.bin
v8.dll
v8_libbase.dll
v8_libplatform.dll
zlib.dll

这就是动态版本v8程序运行所需的dll,运行d8.exe发现可以正常运行(路径包含中文会导致无法双击运行)

v8引擎编译过程记录(保姆级教程)2023.7.22_第22张图片

注:d8.exe仅供测试,它并不是运行v8所必须的

我们如果用动态方法调用v8,还需要dll文件对应的lib,所以说再创建个lib文件夹,复制出以下文件:

v8.dll.lib
v8_libbase.dll.lib
v8_libplatform.dll.lib

5.编译v8 x64 release静态库

回到v8\v8,我们删除out.gn文件夹

如果之前的cmd被关闭了,运行set DEPOT_TOOLS_WIN_TOOLCHAIN=0设置环境变量

v8\v8下运行以下命令生成静态编译配置

python3 tools\dev\v8gen.py x64.release -- v8_monolithic=true v8_use_external_startup_data=false use_custom_libcxx=false is_component_build=false treat_warnings_as_errors=false v8_symbol_level=0 is_clang=false

使用ninja编译

ninja -C out.gn\x64.release v8_monolith

和动态库编译一样,这个过程也耗时,耐心等待编译完成

期间会出现很多注意:包含文件:的提示,忽略即可

跑完后我们进入v8\v8\out.gn\x64.release\obj文件夹

仔细寻找可以看到v8_monolith.lib,这个就是我们要的lib静态库了,大约280MB

6.编译v8 x64 debug相关库

动态版本

回到v8\v8,我们删除out.gn文件夹

如果之前的cmd被关闭了,运行set DEPOT_TOOLS_WIN_TOOLCHAIN=0设置环境变量

生成配置

python3 tools\dev\v8gen.py x64.debug -vv -- is_component_build=true v8_static_library=false

编译

ninja -C out.gn\x64.debug

在别的地方创建个文件夹,复制出以下文件作为运行时:

d8.exe
icudtl.dat
icui18n.dll
icuuc.dll
libc++.dll
snapshot_blob.bin
v8.dll
v8_libbase.dll
v8_libplatform.dll
zlib.dll

复制出以下文件作为lib:

v8.dll.lib
v8_libbase.dll.lib
v8_libplatform.dll.lib

运行d8.exe发现正常运行(路径包含中文会导致无法双击运行)

注:d8.exe仅供测试,它并不是运行v8所必须的

静态版本

回到v8\v8,我们删除out.gnout文件夹

如果之前的cmd被关闭了,运行set DEPOT_TOOLS_WIN_TOOLCHAIN=0设置环境变量

生成Debug版本需要另一个方法来配置

先运行

gn args out/x64.debug

这个时候会自动弹出一个记事本,我们不要关闭它

v8引擎编译过程记录(保姆级教程)2023.7.22_第23张图片

往记事本里面输入这些

v8_monolithic=true 
v8_use_external_startup_data=false 
use_custom_libcxx=false 
is_component_build=false 
treat_warnings_as_errors=false 
v8_symbol_level=0 
is_clang=false 
is_debug=true

输入后配置文件的内容应该和下图一样

v8引擎编译过程记录(保姆级教程)2023.7.22_第24张图片

然后我们Ctrl+S保存,然后关闭记事本窗口

等待一会,可以看到进度跑完了

v8引擎编译过程记录(保姆级教程)2023.7.22_第25张图片

用下面的命令编译

ninja -C out/x64.debug v8_monolith

和动态库编译一样,这个过程也耗时,耐心等待编译完成

期间会出现很多注意:包含文件:的提示,忽略即可

跑完后我们进入v8\v8\out\x64.debug\obj文件夹

仔细寻找可以看到v8_monolith.lib,这个就是我们要的lib静态库了,大约450MB

6.编译v8 ia32相关库

注:ia32又称x86,也就是32位版本

①release版本

动态

像前面一样,回到v8\v8,删除out.gnout文件夹

如果之前的cmd被关闭了,运行set DEPOT_TOOLS_WIN_TOOLCHAIN=0设置环境变量

运行命令生成配置

python3 tools\dev\v8gen.py ia32.release -vv -- is_component_build=true v8_static_library=false

运行命令编译

ninja -C out.gn\ia32.release

跑完后我们进入v8\v8\out.gn\ia32.release\文件夹

在别的地方创建个文件夹,复制出以下文件作为运行时:

d8.exe
icudtl.dat
icui18n.dll
icuuc.dll
libc++.dll
snapshot_blob.bin
v8.dll
v8_libbase.dll
v8_libplatform.dll
zlib.dll

复制出以下文件作为lib:

v8.dll.lib
v8_libbase.dll.lib
v8_libplatform.dll.lib

运行d8.exe发现正常运行(路径包含中文会导致无法双击运行)

注:d8.exe仅供测试,它并不是运行v8所必须的

静态

像前面一样,回到v8\v8,删除out.gnout文件夹

如果之前的cmd被关闭了,运行set DEPOT_TOOLS_WIN_TOOLCHAIN=0设置环境变量

运行命令生成配置

python3 tools\dev\v8gen.py ia32.release -- v8_monolithic=true v8_use_external_startup_data=false use_custom_libcxx=false is_component_build=false treat_warnings_as_errors=false v8_symbol_level=0 is_clang=false

使用ninja编译

ninja -C out.gn\ia32.release v8_monolith

期间会出现很多注意:包含文件:的提示,忽略即可

跑完后我们进入v8\v8\out.gn\ia32.release\obj文件夹

仔细寻找可以看到v8_monolith.lib,这个就是我们要的lib静态库了,大约160MB

②debug版本

动态

像前面一样,回到v8\v8,删除out.gnout文件夹

如果之前的cmd被关闭了,运行set DEPOT_TOOLS_WIN_TOOLCHAIN=0设置环境变量

生成配置

python3 tools\dev\v8gen.py ia32.debug -vv -- is_component_build=true v8_static_library=false

编译

ninja -C out.gn\ia32.debug

在别的地方创建个文件夹,复制出以下文件作为运行时:

d8.exe
icudtl.dat
icui18n.dll
icuuc.dll
libc++.dll
snapshot_blob.bin
v8.dll
v8_libbase.dll
v8_libplatform.dll
zlib.dll

复制出以下文件作为lib:

v8.dll.lib
v8_libbase.dll.lib
v8_libplatform.dll.lib

运行d8.exe发现正常运行(路径包含中文会导致无法双击运行)

注:d8.exe仅供测试,它并不是运行v8所必须的

静态

像前面一样,回到v8\v8,删除out.gnout文件夹

如果之前的cmd被关闭了,运行set DEPOT_TOOLS_WIN_TOOLCHAIN=0设置环境变量

生成Debug版本用前面讲x64 静态Debug版本时提到的另一个方法来配置

先运行

gn args out/ia32.debug

这个时候会自动弹出一个记事本,往记事本里面输入这些

v8_monolithic=true 
v8_use_external_startup_data=false 
use_custom_libcxx=false 
is_component_build=false 
treat_warnings_as_errors=false 
v8_symbol_level=0 
is_clang=false 
is_debug=true
target_cpu = "x86"

然后Ctrl+S保存,关闭记事本窗口

等到进度跑完后,用下面的命令编译

ninja -C out/ia32.debug v8_monolith

期间会出现很多注意:包含文件:的提示,忽略即可

跑完后我们进入v8\v8\out\ia32.debug\obj文件夹

仔细寻找可以看到v8_monolith.lib,这个就是我们要的lib静态库了,大约240MB

7.结尾

本人是编程小白,这个V8项目真的一步一个坑,查了无数资料一个个尝试才成功,V8编译真麻烦

我自己每一样都编译了一份,放百度网盘了:

链接:https://pan.baidu.com/s/1MIkq82fH8K7TNQoRNrpCXQ?pwd=62kz

提取码:62kz

参考资料:

https://blog.csdn.net/xray2/article/details/120595202

https://blog.csdn.net/slc1112/article/details/115328904

https://blog.csdn.net/u011760195/article/details/109941227

https://blog.csdn.net/weixin_43939128/article/details/104678515

https://blog.csdn.net/qq_33958297/article/details/105331502

你可能感兴趣的:(windows,c++,js,后端)