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

图片

我选择了一年前的104版本

图片

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

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

图片

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

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链接下载包

图片

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

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

图片

注意: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文件夹

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

图片

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

cd ninja
git checkout release

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

图片

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

python configure.py --bootstrap

图片

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

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

图片

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

我们可以看到报错了

图片

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

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

图片

点击修改

图片

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

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

图片

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

图片

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

图片

选择Change,然后点击Next

图片

勾上Debugging Tools for Windows,点击Change

图片

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

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

配置生成成功了

图片

使用ninja编译

ninja -C out.gn\x64.release

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

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

图片

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

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

图片

图片

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

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

图片

输出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发现可以正常运行(路径包含中文会导致无法双击运行)

图片

注: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_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

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

图片

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

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

图片

用下面的命令编译

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

  • 10
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值