You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ARM64驱动项目链接失败:未解析外部符号__security_pop_cookie等

问题背景

编译ARM64架构的Windows驱动项目时,链接阶段出现以下未解析符号错误,但x86/x64架构编译正常:

1>wdmsec.lib(ppregstate.obj) : error LNK2001: unresolved external symbol __security_pop_cookie
1>wdmsec.lib(cmregutil.obj) : error LNK2001: unresolved external symbol __security_pop_cookie
1>wdmsec.lib(ppregstate.obj) : error LNK2001: unresolved external symbol __security_push_cookie
1>wdmsec.lib(cmregutil.obj) : error LNK2001: unresolved external symbol __security_push_cookie
Fatal error LNK1120: 2 unresolved externals

问题原因

这两个符号属于Visual Studio的缓冲区溢出保护(GS)机制,x86/x64架构下驱动编译会自动处理这些符号,但ARM64驱动环境中,默认配置可能未正确链接对应的安全cookie库,或项目GS设置与链接依赖不匹配。

可行解决方案

1. 关闭缓冲区安全检查

如果不需要GS保护,直接关闭该功能:

  • 打开项目属性,依次进入「配置属性 -> C/C++ -> 代码生成」
  • 将「缓冲区安全检查」设为「否(/GS-)」,重新编译链接即可。

2. 显式添加ARM64安全库依赖

若要保留GS保护,需手动链接ARM64版本的bufferoverflowu.lib:

  • 进入项目属性「配置属性 -> 链接器 -> 输入」
  • 在「附加依赖项」中添加bufferoverflowu.lib,确保使用的是ARM64架构对应的库文件。

3. 验证wdmsec.lib的架构匹配性

确认当前使用的wdmsec.lib是ARM64版本:

  • 用dumpbin /headers wdmsec.lib命令查看库的目标架构,输出中需包含ARM64标识。如果是x86/x64版本,替换为ARM64版即可。

4. 直接编辑VCXPROJ配置

如果图形界面设置无效,可直接修改.vcxproj文件,在ARM64配置块中添加依赖:

<PropertyGroup Condition="'$(Platform)'=='ARM64'">
  <LinkAdditionalDependencies>bufferoverflowu.lib;%(LinkAdditionalDependencies)</LinkAdditionalDependencies>
</PropertyGroup>

内容的提问来源于stack exchange,提问作者Ashish Kishor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 19:02:42