如何在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

相关文章

Redis在windows环境下如何启动

《Redis在windows环境下如何启动》:本文主要介绍Redis在windows环境下如何启动的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Redis在Windows环境下启动1.在redis的安装目录下2.输入·redis-server.exe

一文详解如何从零构建Spring Boot Starter并实现整合

《一文详解如何从零构建SpringBootStarter并实现整合》SpringBoot是一个开源的Java基础框架,用于创建独立、生产级的基于Spring框架的应用程序,:本文主要介绍如何从... 目录一、Spring Boot Starter的核心价值二、Starter项目创建全流程2.1 项目初始化(

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

使用Python和python-pptx构建Markdown到PowerPoint转换器

《使用Python和python-pptx构建Markdown到PowerPoint转换器》在这篇博客中,我们将深入分析一个使用Python开发的应用程序,该程序可以将Markdown文件转换为Pow... 目录引言应用概述代码结构与分析1. 类定义与初始化2. 事件处理3. Markdown 处理4. 转

Windows Server服务器上配置FileZilla后,FTP连接不上?

《WindowsServer服务器上配置FileZilla后,FTP连接不上?》WindowsServer服务器上配置FileZilla后,FTP连接错误和操作超时的问题,应该如何解决?首先,通过... 目录在Windohttp://www.chinasem.cnws防火墙开启的情况下,遇到的错误如下:无法与

Python解析器安装指南分享(Mac/Windows/Linux)

《Python解析器安装指南分享(Mac/Windows/Linux)》:本文主要介绍Python解析器安装指南(Mac/Windows/Linux),具有很好的参考价值,希望对大家有所帮助,如有... 目NMNkN录1js. 安装包下载1.1 python 下载官网2.核心安装方式3. MACOS 系统安

Windows系统下如何查找JDK的安装路径

《Windows系统下如何查找JDK的安装路径》:本文主要介绍Windows系统下如何查找JDK的安装路径,文中介绍了三种方法,分别是通过命令行检查、使用verbose选项查找jre目录、以及查看... 目录一、确认是否安装了JDK二、查找路径三、另外一种方式如果很久之前安装了JDK,或者在别人的电脑上,想

Java使用Mail构建邮件功能的完整指南

《Java使用Mail构建邮件功能的完整指南》JavaMailAPI是一个功能强大的工具,它可以帮助开发者轻松实现邮件的发送与接收功能,本文将介绍如何使用JavaMail发送和接收邮件,希望对大家有所... 目录1、简述2、主要特点3、发送样例3.1 发送纯文本邮件3.2 发送 html 邮件3.3 发送带

Windows命令之tasklist命令用法详解(Windows查看进程)

《Windows命令之tasklist命令用法详解(Windows查看进程)》tasklist命令显示本地计算机或远程计算机上当前正在运行的进程列表,命令结合筛选器一起使用,可以按照我们的需求进行过滤... 目录命令帮助1、基本使用2、执行原理2.1、tasklist命令无法使用3、筛选器3.1、根据PID

Python中Windows和macOS文件路径格式不一致的解决方法

《Python中Windows和macOS文件路径格式不一致的解决方法》在Python中,Windows和macOS的文件路径字符串格式不一致主要体现在路径分隔符上,这种差异可能导致跨平台代码在处理文... 目录方法 1:使用 os.path 模块方法 2:使用 pathlib 模块(推荐)方法 3:统一使