未解析的外部符号__guard_fids_table [重复]

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

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

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是Windows 8.1中引入的Microsoft反恶意软件Control Flow Guard API的一部分。一些消息来源告诉它需要Visual C ++版本14.0(这是MSVS 2015 Update 3),但是,它仍然缺乏这个API的良好文档,所以我不是百分百肯定。

问题是它可能是构建系统的错误(Virtualbox OSE 6是相当新的,未经过适当测试),或者只需要一些额外的配置。我需要一些方向进行进一步调查,因为几乎没有官方文档如何构建Oracle Virtualbox 6,他们的论坛在很多年前就已经死了。

那个时刻的主要问题是,甚至可以将这些对象与VC ++ 10.0或更新的编译器链接,或者只是Windows 10 SDK。

任何人都有编译Virtualbox 6的经验也很棒

c++ winapi virtualbox controlflowguard
1个回答
0
投票

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

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