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

VS2022 x64环境下链接器无法找到汇编符号StubCode的问题

问题解决方法

核心原因

C编译器会对函数名进行名字修饰(Name Mangling),而你汇编代码中导出的是未修饰的StubCode符号,导致链接器无法匹配C代码中被修饰过的函数符号。另外,x64平台下Windows只有一种调用约定(Microsoft x64调用约定),__cdecl/__stdcall这类关键字在x64下会被编译器忽略,所以更换调用约定无法解决问题。

具体修复方案

方案1:在C++代码中用extern "C"禁用名字修饰

修改C++代码,通过extern "C"声明汇编函数,让编译器生成未修饰的符号名,和汇编导出的符号完全匹配:

extern "C" __int64 StubCode();

int main()
{
    __int64 n = StubCode();
    return 0;
}

方案2:汇编代码中使用C++风格修饰名导出(不推荐)

如果坚持不用extern "C",可以在汇编中导出C修饰后的函数名。x64下C对__int64 StubCode(void)的修饰名是?StubCode@@YA_JXZ,修改汇编代码如下:

.code
PUBLIC ?StubCode@@YA_JXZ

?StubCode@@YA_JXZ PROC 
    mov rax, 4711
    ret
?StubCode@@YA_JXZ ENDP
end

但这种方式维护性极差,函数签名(返回值、参数)变化时修饰名也会同步改变,优先推荐方案1。

额外检查项

  • 确认汇编文件的项类型已设置为「Microsoft Macro Assembler」:右键汇编文件→属性→配置属性→常规→项类型,选择对应选项。
  • 确认项目编译平台为x64:解决方案平台选择x64,避免汇编与C++代码的编译架构不匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 09:23:15