【问题标题】:V8 c++ - Failed to deserialize the V8 snapshot blobV8 c++ - 无法反序列化 V8 快照 blob
【发布时间】:2021-10-24 17:44:23
【问题描述】:

我正在尝试使用通过 vcpkg install v8 编译的 V8 库,但收到以下错误:

Failed to deserialize the V8 snapshot blob. This can mean that the snapshot blob file is corrupted or missing.

我正在发货的hello-world.cc 示例上对其进行测试:

v8::V8::InitializeICUDefaultLocation(argv[0]);
v8::V8::InitializeExternalStartupData(argv[0]);
std::unique_ptr<v8::Platform> platform = v8::platform::NewDefaultPlatform();
v8::V8::InitializePlatform(platform.get());
v8::V8::Initialize();
Isolate::CreateParams create_params;
create_params.array_buffer_allocator =
    v8::ArrayBuffer::Allocator::NewDefaultAllocator();
Isolate* isolate = Isolate::New(create_params);  // << here is the crash
Isolate::Scope isolate_scope(isolate);

Isolate* isolate = Isolate::New(create_params); 中生成此错误是因为内部变量 i_isole 没有分配任何快照博客:

 if (!i::Snapshot::Initialize(i_isolate)) {
    // If snapshot data was provided and we failed to deserialize it must
    // have been corrupted.
    if (i_isolate->snapshot_blob() != nullptr) {
      FATAL(
          "Failed to deserialize the V8 snapshot blob. This can mean that the "
          "snapshot blob file is corrupted or missing.");
    }

很遗憾,我找不到任何有关此错误的参考。感谢您的建议。

更新:我正在 Visual Studio 2019 上尝试,在 32 位构建和 64 位构建上也是如此。

更新:基于 vcpkg.json 文件,版本为“9.0.257.17”。如果这不是一些已经修复的错误,我会尝试将其更新到最新版本。

【问题讨论】:

    标签: javascript c++ v8 vcpkg


    【解决方案1】:

    要使v8::V8::InitializeExternalStartupData(argv[0]); 正常工作,请确保snapshot_blob.bin 文件与已编译的可执行文件位于同一目录中。或者,请确保您传递的是正确的路径,而不是 argv[0]

    我对@9​​87654324@一无所知; 可能您以这种方式获得的库是在没有V8_USE_EXTERNAL_STARTUP_DATA 的情况下编译的,在这种情况下,您也应该关闭构建的外部启动数据。如果您根本没有snapshot_blob.bin 文件,则表明情况确实如此。

    【讨论】:

    • 非常感谢您的回复。我已经尝试在路径中创建 snapshot_blob.bin,但如果这个文件为空,则会出现另一个错误:“调试检查失败:snapshot_blob->raw_size > 0 (0 vs. 0)。”所以也许这个文件必须以某种方式预先创建,但我在文档中没有找到任何关于这个的提及(而且任何示例都没有说明关于预先创建文件的任何内容)。关于V8_USE_EXTERNAL_STARTUP_DATA,它是用这个标志编译的。
    • 你的最后一句话对我来说才开始有意义。这个 bin 文件不是 V8 在运行时创建的,而是在构建期间预编译的。我在构建中有这个文件,所以我可以继续测试。
    • 非常感谢,它正在工作!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 2011-09-07
    • 2020-03-17
    • 1970-01-01
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多