如何在Windows上构建V8而不发疯

2024-01-12 08:20
文章标签 构建 windows v8 发疯

本文主要是介绍如何在Windows上构建V8而不发疯,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

“打造V8并不是为了胆小” –互联网上的某人

有时我想知道我对JavaScript知识的无限渴望会导致我走向何方。 这次,我决定学习浏览器和Node如何使用V8,以及每天使用的API来自何处。 因此,我着手研究V8和两个最受欢迎的托管环境之间的集成。

我的计划是构建一个嵌入V8的简单应用程序。 而且由于没有多少Web开发人员知道事件循环不是由V8实现的,而是由托管环境实现的,因此我想在我的应用程序中对此进行演示。 我也希望一路了解V8的内部运作方式。

但是首先我必须从源代码构建V8并将其嵌入到简单的HelloWorld应用程序中。 事实证明,这项任务不适合胆小的人。 我花了一个星期的时间来搜索和学习有关C ++和python的许多知识。 我不得不问四个关于stackoverflow的问题。 我将保留它们,这是我建造该产品所需的其余工作。

由于构建和嵌入都不是无关紧要的,因此本文由两部分组成。 第一个展示了如何从Windows计算机上的源代码构建V8。 第二部分介绍了将其插入应用程序所需的条件。 当前V8只能在x64计算机上构建,因此请确保您在Windows x64版本上构建。

请推荐这篇文章💚,以便其他人知道有更简单的方法来构建V8。 我真的希望这篇文章可以使一些好奇的人省去很多麻烦。

搭建环境

此处提供了有关如何构建V8的说明,但不幸的是,它们假定您已经具有工作环境,并且省略了许多详细信息。 但是这些细节正是构建V8棘手的原因。

V8使用了Chromium项目工具链的一部分,因此这里找到的一些信息对我也有帮助。 请注意,您无需获取和构建Chromium源即可构建V8。 仅需要一部分工具链,例如depot_tools。

吉特

V8使用GIT作为VCS,因此请下载并安装它。

VS 2015

在Windows上构建V8需要Visual Studio附带的构建工具。 自2016年12月8日起,Chromium需要带有14393 Windows SDK的Visual Studio 2015 Update 3。 因此,继续并在此处下载带有Update 3的Visual Studio Community 2015的安装程序。 此页面需要会员资格,但是它是免费的,因此这里无后顾之忧。 现在运行安装程序,并确保选择以下内容:

安装完成后,请检查安装程序是否已将调试接口访问(DIA)SDK和vcvarsall.bat安装到以下目录:

  • …\ Microsoft Visual Studio 14.0 \ DIA SDK
  • …\ Microsoft Visual Studio 14.0 \ VC \ vcvarsall.bat

由于某些原因,这些在安装后可能会丢失。 如果是这样,您将必须弄清楚原因以及安装它们的方式。 否则,您将无法构建。 就我而言,它正确地安装在一台机器上而另一台机器上却没有。

Windows SDK

由于Chromium使用的Debugging Tools For Windows并未作为VS安装的一部分安装,因此您还需要单独安装Windows SDK。 在此处下载安装程序并进行安装。 确保已在安装程序中选择了软件包:

仓库工具

下载 depot_tools捆绑包并将其解压缩到某处。

警告: 请勿使用资源管理器中的拖放粘贴或复制粘贴粘贴,这不会提取隐藏的“ .git”文件夹,这对于depot_tools自动更新本身是必需的。 但是,您可以从上下文菜单中使用“全部提取...”。
环境变量

将depot_tools添加到PATH的开头。 许多构建python脚本是针对低于3.x的Python版本编写的,因此请确保它在任何Python安装之前都领先。 假设您将软件包解压缩到E:\ V8 \ depot_tools更新路径,如下所示:

我还建议将其添加到系统变量PATH中,而不是用户变量中。 PATH是从系统路径构造的,可以在“系统”对话框的“系统环境变量”字段中查看。 用户路径被附加到系统路径 这意味着,如果您将路径添加到User变量,并且从系统路径中找到其他Python安装,则会遇到问题。

您还需要指定两个环境变量:

  • DEPOT_TOOLS_WIN_TOOLCHAIN = 0
  • GYP_MSVS_VERSION = 2015
更新软件仓库工具

从cmd.exe Shell运行命令gclient(不带参数)。 首次运行时,gclient将安装使用该代码所需的所有Windows特定位,包括msysgit和python。

  • 如果从非cmd外壳程序(例如cygwin,PowerShell)运行gclient,则它似乎可以正常运行,但是msysgit,python和其他工具可能无法正确安装。
  • 如果在首次运行gclient时看到文件系统奇怪的错误,则可能要禁用Windows Indexing 。

运行gclient后,打开命令提示符并在其中键入python,并确认depot_tools python.bat位于python.exe的任何副本之前。

获取源代码

进入要将V8源下载到的目录,并在终端/外壳中执行以下操作:

fetch v8 cd v8

V8号楼

现在我们已经准备好环境,可以构建V8了。 所有命令都应使用V8源目录中的Windows Command Shell执行。 我们将在构建过程中执行python脚本,并且需要确保使用build_tools中的python可执行文件。 问题是Windows可以将python文件与PC上安装的其他版本的python相关联,因此请始终以以下语法执行命令:

python path/to/script params

不是这个

path/to/script params

通过执行以下操作开始下载所有构建依赖项:

gclient sync

然后通过运行以下命令生成必要的构建文件:

python tools/dev/v8gen.py x64.release

要将V8嵌入到我们的应用程序中,我们需要将其构建为静态库。 为此,我们需要修改默认的构建配置,并将这两个标志添加到args.gn文件中:

is_component_build = false v8_static_library = true

运行以下命令以在编辑器中打开文件.. \ out.gn \ x64.release \ args.gn:

gn out.gn\x64.release

添加这些行,使结果文件如下所示:

is_debug = false target_cpu = “x64” is_component_build = false v8_static_library = true

最后一件事是通过执行以下命令来编译源代码:

ninja -C out.gn/x64.release

运行测试以验证所有内容均正确构建:

tools/run-tests.py --gn

建立结果

构建生成带有许多静态库文件 (* .lib)的.. \ v8source \ out.gn \ x64.release \ obj文件夹:v8_base.lib,v8_libbase.lib等。将v8嵌入到我们的应用程序中时,将使用这些文件。

将V8嵌入到自定义应用程序中

事实证明,斗争并没有以成功的建立而告终。 尝试嵌入V8并构建示例Hello world应用程序时,我也跳过了多个步骤。 该手册非常简短,适用于基于Linux的系统,并且缺少许多重要的细节。

我们将V8嵌入到一个简单的控制台应用程序中。 按照此处 (不要选中Empty project)或此处所述的说明创建应用程序。 这将创建Win32应用程序,但是V8是为x64体系结构构建的,因此我们需要对项目进行一些修改。 为此,请转到项目属性并选择x64活动解决方案平台:

另外,默认情况下,V8是在发布模式下构建的。 为了避免这样的失配误差这样 ,我们需要设置该项目,以发布配置:

另外,我们需要使应用程序使用运行库的多线程静态版本:

配置包含和库目录

接下来,我们需要添加文件夹以查找包含目录的 V8头文件:

并将带有V8静态库文件的文件夹添加到库目录

该页面很好地总结了所有类型的目录。

撰写HelloWorld cpp文件

现在,从此处将HelloWorld示例复制到您的主cpp文件,并将stdafx作为文件中的头顶包含文件:

#include “stdafx.h”
链接静态库

我们快完成了。 如前所述,V8本身由.. \ v8source \ out.gn \ x64.release \ obj目录中的静态库文件组成。 现在我们需要链接这些库。 为此,将以下内容添加到您的代码中:

#pragma comment(lib, "v8_base.lib") #pragma comment(lib, "v8_libbase") #pragma comment(lib, "v8_external_snapshot") #pragma comment(lib, "v8_libplatform") #pragma comment(lib, "v8_libsampler") #pragma comment(lib, "icuuc.lib") #pragma comment(lib, "icui18n.lib") #pragma comment(lib, "inspector")

并链接V8库所需的Windows相关库:

#pragma comment(lib, "winmm.lib") #pragma comment(lib, "dbghelp.lib") #pragma comment(lib, "shlwapi.lib")
编译应用

现在终于可以开始构建了。 转到Build-> Build solution或按Ctrl + Shift + B。 这将生成一个可执行文件到以下位置:

..\project-folder\x64\Release\project-name.exe
还有一些

V8需要两个位于…\ v8-source \ out.gn \ x64.release中的文件才能启动:

  • snapshot_blob.bin
  • natives_blob.bin

将它们复制到可执行文件所在的位置。 而已。 现在,您可以从命令行运行可执行文件,它应该输出“ Hello World”。

您发现文章中的信息有帮助吗?

From: https://hackernoon.com/how-to-build-v8-on-windows-and-not-go-mad-6347c69aacd4

这篇关于如何在Windows上构建V8而不发疯的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/597286

相关文章

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

maven 编译构建可以执行的jar包

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,「stormsha的知识库」👈持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO

嵌入式Openharmony系统构建与启动详解

大家好,今天主要给大家分享一下,如何构建Openharmony子系统以及系统的启动过程分解。 第一:OpenHarmony系统构建      首先熟悉一下,构建系统是一种自动化处理工具的集合,通过将源代码文件进行一系列处理,最终生成和用户可以使用的目标文件。这里的目标文件包括静态链接库文件、动态链接库文件、可执行文件、脚本文件、配置文件等。      我们在编写hellowor

在 Windows 上部署 gitblit

在 Windows 上部署 gitblit 在 Windows 上部署 gitblit 缘起gitblit 是什么安装JDK部署 gitblit 下载 gitblit 并解压配置登录注册为 windows 服务 修改 installService.cmd 文件运行 installService.cmd运行 gitblitw.exe查看 services.msc 缘起

Windows如何添加右键新建菜单

Windows如何添加右键新建菜单 文章目录 Windows如何添加右键新建菜单实验环境缘起以新建`.md`文件为例第一步第二步第三步 总结 实验环境 Windows7 缘起 因为我习惯用 Markdown 格式写文本,每次新建一个.txt后都要手动修改为.md,真的麻烦。如何在右键新建菜单中添加.md选项呢? 网上有很多方法,这些方法我都尝试了,要么太麻烦,要么不凑效

利用命令模式构建高效的手游后端架构

在现代手游开发中,后端架构的设计对于支持高并发、快速迭代和复杂游戏逻辑至关重要。命令模式作为一种行为设计模式,可以有效地解耦请求的发起者与接收者,提升系统的可维护性和扩展性。本文将深入探讨如何利用命令模式构建一个强大且灵活的手游后端架构。 1. 命令模式的概念与优势 命令模式通过将请求封装为对象,使得请求的发起者和接收者之间的耦合度降低。这种模式的主要优势包括: 解耦请求发起者与处理者

Jenkins构建Maven聚合工程,指定构建子模块

一、设置单独编译构建子模块 配置: 1、Root POM指向父pom.xml 2、Goals and options指定构建模块的参数: mvn -pl project1/project1-son -am clean package 单独构建project1-son项目以及它所依赖的其它项目。 说明: mvn clean package -pl 父级模块名/子模块名 -am参数

Windows下Nginx的安装及开机启动

1、将nginx-1.16.1.zip解压拷贝至D:\web\nginx目录下。 2、启动Nginx,两种方法: (1)直接双击nginx.exe,双击后一个黑色的弹窗一闪而过。 (2)打开cmd命令窗口,切换到nginx目录下,输入命令 nginx.exe 或者 start nginx ,回车即可。 3、检查nginx是否启动成功。 直接在浏览器地址栏输入网址 http://lo

JAVA用最简单的方法来构建一个高可用的服务端,提升系统可用性

一、什么是提升系统的高可用性 JAVA服务端,顾名思义就是23体验网为用户提供服务的。停工时间,就是不能向用户提供服务的时间。高可用,就是系统具有高度可用性,尽量减少停工时间。如何用最简单的方法来搭建一个高效率可用的服务端JAVA呢? 停工的原因一般有: 服务器故障。例如服务器宕机,服务器网络出现问题,机房或者机架出现问题等;访问量急剧上升,导致服务器压力过大导致访问量急剧上升的原因;时间和