【发布时间】:2019-04-29 15:42:53
【问题描述】:
我目前正在学习 masm,但在调用外部函数时遇到问题。
我在 C++ 中有一个名为 writei 的函数,它接收一个 uint64 并输出它。
int writei(uint64_t a)
{
cout << a;
return 1;
}
我尝试“extrn”并从 .asm 文件中调用它,但编译器抛出“在函数 mai 中引用的未解析的外部符号 writei”。
这是 masm 代码(我使用的是 Visual Studio 2019)
extern writei : proto
.code
mai proc
push rbp
push rsp
mov ecx,3
call writei
pop rsp
pop rbp
ret
mai endp
end
【问题讨论】:
-
您可能需要阅读 C++ 名称修饰。
-
@GideonMax - Jesper Juhl 是正确的:您需要在 C++ 端使用“extern C”处理“名称修改”。这确保了 C++ 目标文件具有与 C 兼容的外部名称(或等效地与 asm)。当然,您*也 在您的汇编源代码中也需要适当的“外部”定义。有关详细信息,请参阅下面的链接。
-
您通过接受答案表明问题已得到回答/解决。
标签: c++ visual-c++ masm