一开始我是参考:https://blog.csdn.net/qq_33958297/article/details/105331502,因为百度上一搜就是它
但是那篇博客讲得很迷,跟着做没有成功。后面踩坑无数,查了一大堆资料才总结出这套稳定可用的方法,希望能帮到后人。
这篇文章我在博客园、知乎也有同步发布。
1.安装了在环境变量里面的Python310和Git,点我访问相关博客
2.安装有VS2022(可能需要安装上使用C++的桌面开发
、通用Windows平台开发
)
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窗口和代理程序不关闭,进入下一步
访问
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
要在所有其它路径之前。
我们回到设置了代理的那个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
找一个合适的地方,然后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
目录下
我们回到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
回到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
回到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.gn
、out
文件夹
如果之前的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
注:ia32又称x86,也就是32位版本
像前面一样,回到v8\v8
,删除out.gn
、out
文件夹
如果之前的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.gn
、out
文件夹
如果之前的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
像前面一样,回到v8\v8
,删除out.gn
、out
文件夹
如果之前的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.gn
、out
文件夹
如果之前的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
本人是编程小白,这个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