11

我正在为学校制作一个游戏引擎,我想使用 Google 的 V8 来允许在引擎中编写 JavaScript 脚本。该引擎是使用 Visual Studio 2013 编写的,由于最终游戏不得超过 50MB,因此我希望尽可能减小对 V8 文件大小的影响。

在 Internet 上查找如何使用 V8 进行操作时,我发现了一系列关于 V8 的教程,其中包含 V8 的预编译 .lib 文件。然而,它已经四岁了。我假设自己构建一个更新的版本会提高性能并添加功能,所以我昨天花了所有时间在 V8 构建过程中苦苦挣扎,最终想出了如何为 Visual Studio 编译 V8:

  1. 安装 Google 的“仓库工具”
  2. fetch v8

这为我提供了生成 V8 Visual Studio 解决方案所需的一切,当我编译它时,它可以工作并生成 .lib 和 .dll 文件。但是,当我尝试创建一个测试解决方案并将这些库链接到它时,这令人难以置信的混乱。

构建过程会生成以下 LIB 文件:

  • cctest.lib
  • gmock.lib
  • gtest.lib
  • icui18n.lib
  • icuuc.lib
  • mksnapshot.lib
  • 单元测试.lib
  • v8.lib
  • v8_base.lib
  • v8_libbase.lib
  • v8_libplatform.lib
  • v8_nosnapshot.lib
  • v8_snapshot.lib

以及以下 DLL:

  • icudt.dll
  • icui18n.dll
  • icuuc.dll
  • v8.dll

昨天的某个时候,我包含了许多库(我认为它是 v8、v8_base 和 v8_snapshot)并将所有 DLL 复制到我项目的输出目录中,它最终工作了。但是,正如我上面所说,我需要 V8 对文件大小的影响尽可能小。我不需要 i18n 支持,那么有没有办法在没有它的情况下进行编译?就像我上面说的,我有一个旧版本的 V8 .lib,它不需要 DLL 来运行,它编译和工作正常......但我错过了新的功能和改进,因为它是四年老的?无论如何,所有这些 .lib 是什么意思?我找不到任何关于哪些人做了什么或类似事情的文档。

所以是的,我想如果有人可以提供说明或向我指出任何有帮助的文档,那就太好了。我昨天花了几乎一整天的时间来解决这个问题。

4

2 回答 2

5

V8 wiki 中有一个使用 GYP 构建的页面。简而言之,您应该使用 GYP 生成 Visual Studio 解决方案,然后构建它。

  1. 安装 Python、Subversion 客户端;使其从命令行可用。
  2. 打开 Visual Studio 命令提示符,在此处执行后续步骤。
  3. 将 V8 源代码提取到某个目录中,例如将其命名为 v8-build:

    svn checkout http://v8.googlecode.com/svn/trunk v8-build

对于最新版本(一些标记版本,例如http://v8.googlecode.com/svn/tags/3.28.57

  1. 在 Windows 上,您需要 Cygwin: svn checkout http://src.chromium.org/svn/trunk/deps/third_party/cygwin@66844 v8-build/third_party/cygwin

(查看 v8-build/DEPS 文件中的实际 URL)

  1. 获取 GYP:

    svn checkout http://gyp.googlecode.com/svn/trunk@1831 v8-build/gyp

  2. 可选择获取 ICU:

    svn checkout https://src.chromium.org/svn/trunk/deps/third_party/icu46@258359 v8-build/third_party/icu

  3. 使工具在命令行中可用:

    • set CYGWIN_ROOT=%cd%\v8-build\third_party\cygwin
    • set PATH=%CYGWIN_ROOT%\bin;%PATH%
    • set PYTHONPATH=%cd%\v8-build\gyp\pylib
    • v8-build\third_party\cygwin\setup_mount.bat
    • v8-build\third_party\cygwin\setup_env.bat
  4. 使用所需选项运行 GYP:

    python v8-build\build\gyp_v8 -Dcomponent=static_library -Dtarget_arch=x64 -v8_enable_i18n_support=0 -Dv8_use_snapshot=0

(请参阅 v8-build\build\features.gypi 中允许的变量)

  1. 使用 Cygwin 环境使用 Visual Studio 构建生成的项目:

    msbuild /m /p:UseEnv=true /p:Configuration=Release /p:Platform=x64 v8-build\tools\gyp\v8.vcxproj

  2. 结果库应该在v8-build\build目录中

我使用 Python 脚本来自动执行上述步骤。

更新:我使用类似的脚本为 V8 构建 NuGet 包,这里是:https ://github.com/pmed/v8-nuget/blob/master/build.py

于 2014-10-13T06:50:37.683 回答
2

我知道这篇文章已经很老了,但我会改进 pmed 的答案。我假设你已经在你的 Windows 机器上安装了 Python(只需从官方页面安装它并将 Python 根目录添加到你的 PATH 变量中)和 Git-Bash。我将使用“~/”来代表您的用户目录。

编译 V8 最简单的方法是使用 depot 工具,只需创建一个目录,比如说 ~/devtools/google,使用 git-bash 运行

cd ~/devtools/google
git clone git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

然后将 ~/devtools/google/depot_tools 添加到您的 PATH 变量中。

使用 Power Shell 运行

cd ~/devtools/google
fetch v8

这将克隆 V8 引擎的文件及其所有依赖项 gyp、cygwin 等。

此时您可以按照第 7 步中 pmed 的回答,只需更改环境变量的目录:

我正在使用 Path-to-your-installation\v8\ 来表示 ~/devtools/google/v8

CYGWIN_ROOT=Path-to-your-installation\v8\third_party\cygwin
PATH=%CYGWIN_ROOT%\bin;%PATH%
PYTHONPATH=Path-to-your-installation\v8\build\gyp\pylib

然后运行(在 PowerShell 中) Path-to-your-installation\v8\build\third_party\cygwin\setup_mount.bat Path-to-your-installation\v8\build\third_party\cygwin\setup_env.bat

Visual Studio 项目将位于 Path-to-your-installation\v8\tools\gyp*

您可以使用 Visual Studio 打开 v8 项目并进行编译。

我很难弄清楚为什么“fetch v8”在 Git-bash 中以某种方式失败,显然,你必须使用 PowerShell(也许也是经典的 cmd?)

PS:如果您在编译时遇到问题(无法重新映射 [...] cygncurses-8.dll),请查看这篇文章https://superuser.com/questions/194529/cygwin-fatal-error-unable-to-重新映射是什么意思

问候。

于 2016-03-29T06:14:14.200 回答