首页 > 系统相关 >在windows下使用vs2022编译v8引擎的稳定版本(2023.7.22)

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

时间:2023-07-22 21:55:42浏览次数:47  
标签:false 22 windows dll 编译 文件夹 2023.7 v8 out

0.环境配置

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

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

1.下载v8项目源代码

V8在GitHub上有一个官方镜像:https://github.com/v8/v8
,我们从GitHub上下载源代码

进入项目主页后,如下图所示搜索lkgr版本的分支

图片

记下最新版本,本人写文时是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的安装目录在环境变量里面

图片

注意:环境变量要添加在所有Python相关变量之前。

3.下载配置项目

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

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

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

set DEPOT_TOOLS_WIN_TOOLCHAIN=0

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

fetch v8

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

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

图片

所以说先进入v8文件夹

cd v8

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

git checkout 10.4-lkgr

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

gclient sync -v

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

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

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

python 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窗口,重新生成编译配置

python 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
dbghelp.dll
icui18n.dll
icuuc.dll
libc++.dll
msvcp140.dll
snapshot_blob.bin
v8.dll
v8_libbase.dll
v8_libplatform.dll
vcruntime140.dll
vcruntime140_1.dll
zlib.dll

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

图片

5.编译v8 x64 release静态库

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

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

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

python 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设置环境变量

生成配置

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

编译

ninja -C out.gn\x64.debug

在别的地方创建个文件夹,复制出以下文件

d8.exe
dbghelp.dll
icui18n.dll
icuuc.dll
libc++.dll
msvcp140.dll
msvcp140d.dll
snapshot_blob.bin
ucrtbase.dll
ucrtbased.dll
v8.dll
v8_libbase.dll
v8_libplatform.dll
vcruntime140.dll
vcruntime140d.dll
vcruntime140_1.dll
vcruntime140_1d.dll
zlib.dll

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

静态版本

回到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设置环境变量

运行命令生成配置

python 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
dbghelp.dll
icui18n.dll
icuuc.dll
libc++.dll
msvcp140.dll
snapshot_blob.bin
v8.dll
v8_libbase.dll
v8_libplatform.dll
vcruntime140.dll
zlib.dll

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

静态

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

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

运行命令生成配置

python 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设置环境变量

生成配置

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

编译

ninja -C out.gn\ia32.debug

在别的地方创建个文件夹,复制出以下文件

d8.exe
dbghelp.dll
icui18n.dll
icuuc.dll
libc++.dll
msvcp140.dll
msvcp140d.dll
snapshot_blob.bin
ucrtbase.dll
ucrtbased.dll
v8.dll
v8_libbase.dll
v8_libplatform.dll
vcruntime140.dll
vcruntime140d.dll
zlib.dll

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

静态

像前面一样,回到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编译真tm麻烦

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

链接:https://pan.baidu.com/s/1OfBEFHTezXuF_R9jM7oN9A?pwd=z6z4

提取码:z6z4

参考资料:

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

标签:false,22,windows,dll,编译,文件夹,2023.7,v8,out
From: https://www.cnblogs.com/xy0797/p/17574354.html

相关文章

  • C/C++运动会成绩管理系统[2023-07-22]
    C/C++运动会成绩管理系统[2023-07-22]题目37:运动会成绩管理系统该系统可以记录校运动会全部运动项目的成绩、得分和排名情况,系统功能项以菜单形式显示。项目包括50米、100米、200米、400米、1500米、各接力项目、跳高、立定跳远、三级跳远、铅球等。系统可以实现以下......
  • C/C++疫情信息查询系统[2023-07-22]
    C/C++疫情信息查询系统[2023-07-22]疫情信息查询系统简介一、问题描述为了方便人们快速了解疫情信息,该系统能够提供对各省市卫健委发布疫情数据的录入、查询和统计等功能。疫情数据包括确诊病例、疑似病例等人数信息还包括确诊人的详细轨迹信息。涉及到火车、飞机、长途汽车等......
  • 7.22 做题记录
    小摆......
  • Windows 音量图标点击没有反应——解决方法
    1Win+E,随便打开一个文件夹。2打开任务管理器3重新启动即可......
  • C/C++简易二手交易平台[2023-07-22]
    C/C++简易二手交易平台[2023-07-22]项目一简易二手交易平台题目背景实现一个C2C交易平台管理系统。用户作为买家,购买他人的商品。用户作为卖家,发布自己的商品。需要实现的功能管理员功能:管理员登录、注销查看、搜索、下架商品查看所有订单查看、删除......
  • C/C++教室管理系统[2023-07-22]
    C/C++教室管理系统[2023-07-22]课程题目:教室管理系统内容要求:(1)学生通过这个功能,可以查询相关院系相关教师的个人信息以及开课信息,以便能更好地了解教师及其开课情况。(2)学生通过这个功能,可以查询相关教学楼相关教室的信息以及该教室在每天任一时段的使用情况,或者有课,或者有讲座......
  • C/C++设备预约系统[2023-07-22]
    C/C++设备预约系统[2023-07-22]大型实验室有大量公用试验设备,使用人员众多,使用在线预约管理系统可以有效提高设备的使用效率,节约科研人员的时间。本项目要求设计一个设备预约系统,达到以上目的。建议提供的功能包括:人员管理:使用用户名、密码登录系统。用户包括管理员和一般用......
  • C/C++航空客运订票系统[2023-07-22]
    C/C++航空客运订票系统[2023-07-22]航空客运订票系统1、每条航线所涉及的信息有:终点站名、航班号、飞机号、飞机周日(星期几)、乘员定额、余票量、订定票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需数量)。2、系统能实现的操作和功能如下:(1)查......
  • 2023-07-22:一共有n个项目,每个项目都有两个信息, projects[i] = {a, b}, 表示i号项目做完
    2023-07-22:一共有n个项目,每个项目都有两个信息,projects[i]={a,b},表示i号项目做完要a天,但是当你投入b个资源,它就会缩短1天的时间,你一共有k个资源,你的目标是完成所有的项目,但是希望总天数尽可能缩短。在所有项目同时开工的情况下,返回尽可能少的天数。1<=n<=10^5,1<=k......
  • 2023.7.22 周六:封装
    1//类2publicclassStudent{3privateStringname;4privateintage;5publicvoidsetName(Stringname)6{7this.name=name;8}9publicStringgetName()10{11returnthis.name;12}13......