在windows上编译v8时找不到FILE_INFO_BY_HANDLE_CLASS

问题描述 投票:0回答:4

我正在 win10 pro 20H2 版本上编译 v8。

我已经获取了源代码 并使用

gn gen --ide=vs out\x64_proj
目录下的
v8\src
命令生成 Visual Studio 项目。

上面的过程中存在一些小问题,比如env变量,proxy。但我修好了它们。

当我开始在我的 vs2019 中编译

gn_all
项目时,出现了一些错误。

大多数都非常相似:

1>In file included from ../../../src/base/debug/stack_trace_win.cc:17:
1>In file included from D:\Windows Kits\10\Include\10.0.19041.0\um\windows.h:172:
1>In file included from D:\Windows Kits\10\Include\10.0.19041.0\um\winbase.h:43:
1>In file included from D:\Windows Kits\10\Include\10.0.19041.0\um\fileapifromapp.h:20:
1>D:\Windows Kits\10\Include\10.0.19041.0\um\winbase.h(9118,11): error : unknown type name 'FILE_INFO_BY_HANDLE_CLASS'
1>    _In_  FILE_INFO_BY_HANDLE_CLASS FileInformationClass,
            ^

我用谷歌搜索这个符号并在

minwinbase.h
中找到它:

#if (NTDDI_VERSION >= NTDDI_LONGHORN)
typedef enum _FILE_INFO_BY_HANDLE_CLASS {
    FileBasicInfo,
    FileStandardInfo,
    FileNameInfo,
    FileRenameInfo,
    FileDispositionInfo,
    FileAllocationInfo,
    FileEndOfFileInfo,
    FileStreamInfo,
    FileCompressionInfo,
    FileAttributeTagInfo,
    FileIdBothDirectoryInfo,
    FileIdBothDirectoryRestartInfo,
    FileIoPriorityHintInfo,
    FileRemoteProtocolInfo,
    FileFullDirectoryInfo,
    FileFullDirectoryRestartInfo,
#if (NTDDI_VERSION >= NTDDI_WIN8)
    FileStorageInfo,
    FileAlignmentInfo,
    FileIdInfo,
    FileIdExtdDirectoryInfo,
    FileIdExtdDirectoryRestartInfo,
#endif
#if (NTDDI_VERSION >= NTDDI_WIN10_RS1)
    FileDispositionInfoEx,
    FileRenameInfoEx,
#endif
#if (NTDDI_VERSION >= NTDDI_WIN10_19H1)
    FileCaseSensitiveInfo,
    FileNormalizedNameInfo,
#endif
    MaximumFileInfoByHandleClass
} FILE_INFO_BY_HANDLE_CLASS, *PFILE_INFO_BY_HANDLE_CLASS;
#endif

我猜是版本宏问题导致这个枚举不包含在内。 所以我创建了另一个项目来打印

NTDDI_VERSION
,但它返回
0xa0000008
,它比上面出现的所有宏都大。

然后我尝试将这些宏注释掉,它可以工作,而不是继续编译其他文件,并遇到一些新错误。

但看来这只是一个临时补丁,而不是根本原因,新的错误似乎也与此有关:

1>../../../src/base/debug/stack_trace_win.cc(173,12): error : use of undeclared identifier 'RtlCaptureStackBackTrace'
1>  count_ = CaptureStackBackTrace(0, arraysize(trace_), trace_, nullptr);
1>           ^
1>D:\Windows Kits\10\Include\10.0.19041.0\um\winbase.h(118,31): note: expanded from macro 'CaptureStackBackTrace'
1>#define CaptureStackBackTrace RtlCaptureStackBackTrace
1>../../../src/base/platform/platform-win32.cc(841,11): error : use of undeclared identifier 'IsWindows10OrGreater'
1>      if (IsWindows10OrGreater())

我猜是某些构建工具配置不正确,但我不知道可能是什么。 有人有什么想法吗?

c++ windows compiler-errors v8 ninja
4个回答
2
投票

尝试安装 Windows sdk 版本 10.0.20348.0 或最新版本。


0
投票

我认为生成的VS项目文件足以浏览/编辑,但不适合编译。尝试在命令行上使用

ninja
进行构建。看官方文档,简单来说就是:
ninja -C out\x64_proj
,可选择构建特定目标。


0
投票

这不是一个理想的解决方案,但它满足了我的即时需求。

将 v8 回滚到版本

9.9.115.10
,d8 构建良好。

要回滚,

git checkout 7d7c04aac7d650964d96d1f1c080949ae5519c78
然后
gclient sync

显然主分支目前已损坏。


0
投票

搜索您的所有项目“_WIN32_WINNT”和“WINVER”。将值更改为 0x0A00 #define _WIN32_WINNT 0x0A00 // 目标 Windows 10 #定义WINVER 0x0A00

此变量是您要构建的 Windows 的目标版本。因为您使用的 Visual Studio 有新版本,但您的软件按照旧版本要求运行。所以你需要添加这个。然后编译器可以在 Visual Studio 中查找正确的库

© www.soinside.com 2019 - 2024. All rights reserved.