V8 c++ - 无法反序列化 V8 快照 blob

V8 c++ - Failed to deserialize the V8 snapshot blob

我正在尝试使用通过 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 没有分配任何 snapshot_blog:

 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”。如果这不是一些已经修复的错误,我会尝试将其更新到最新版本。

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

我对vcpkg install v8一无所知;它 可能 是你通过这种方式获得的库是在没有 V8_USE_EXTERNAL_STARTUP_DATA 的情况下编译的,在这种情况下你也应该为你的构建关闭外部启动数据。如果您根本没有 snapshot_blob.bin 文件,则表明是这种情况。