未解析的外部符号 __guard_fids_table

Unresolved external symbol __guard_fids_table

我正在编译一个巨大的开源解决方案(实际上是 Virtualbox 6.0.4 OSE Windows 版本),并遇到以下 linking 错误(同时提供命令和错误,为便于阅读而格式化)

C:/MSVS/10.0/VC/bin/link.exe’
-nologo’
-machine:x86
-Ignore:4197
-Driver
-Subsystem:NATIVE
-Incremental:NO
-Align:4096
-MapInfo:Exports
-NoD
-Release
-Debug
-Opt:Ref
-Opt:Icf
-Version:600.4
-Stub:winstub.com'
-IntegrityCheck
/Entry:DriverEntry@8
/OUT:VBoxWddm.sys
/MAPINFO:EXPORTS
/INCREMENTAL:NO
/MAP:VBoxWddm.map
/LIBPATH:C:/WinDDK/7600.16385.1/lib/wlh/i386
/LIBPATH:C:/WinDDK/8.1.1/Lib/win8/km/x86
@VBoxWddm.rsp
Creating library VBoxWddm.lib and object VBoxWddm.exp 
BufferOverflowK.lib(loadcfg.obj) : error LNK2001: unresolved external symbol __guard_fids_table
BufferOverflowK.lib(loadcfg.obj) : error LNK2001: unresolved external symbol __guard_fids_count
BufferOverflowK.lib(loadcfg.obj) : error LNK2001: unresolved external symbol __guard_flags 
VBoxWddm.sys : fatal error LNK1120: 3 unresolved externals

编译器是 VC++ 10.0(Oracle 为实现 COM 接口向后兼容性所需的过时编译器),Windows 安装了 7 和 8.1 SDK。

我发现,__guard_fids_table 是 Microsoft 反恶意软件 Control Flow Guard API 的一部分,在 Windows 8.1 中引入。一些消息来源告诉它需要 Visual C++ 版本 14.0(即 MSVS 2015 更新 3),但是,它仍然缺乏关于此 API 的良好文档,所以我不是 100% 确定。

问题是它可能是构建系统的错误(Virtualbox OSE 6 很新,没有经过适当测试),或者只是需要一些额外的配置。我需要一些指导来进一步调查,因为实际上没有关于如何构建 Oracle Virtualbox 6 的官方文档,而且他们的论坛多年前就已经死了。

那一刻的主要问题是,甚至可能 link 这些对象需要 VC++ 10.0 或更新的编译器,或者可能只是 Windows 10 SDK。

同样很棒的是任何人都已经有编译 Virtualbox 6 的经验

如果有人感兴趣,我找到了解决方案。 Windows DDK 8.0 是 VC++ 10.0 支持的最后一个版本,应该使用它来代替 7.1 或 8.1。 DDK 7.1 声明不足以构建此特定驱动程序,而 8.1 已包含 Control Flow Guard API,因此 8.0 是剩下的唯一选项