【发布时间】:2021-05-10 20:37:35
【问题描述】:
所以我目前正在尝试从汇编程序运行外部 C++ 函数。我的汇编程序运行正常,但我不断收到链接器错误提示:
“错误 LNK2019 未解析的外部符号 _testFunc@0 在函数 __main@0 中引用”
我想知道为什么会出现这个错误,我认为这是因为我以某种方式错误地将我的 C++ 函数导入到我的 asm 程序中,但我看到其他人以类似的方式这样做。
这是我的汇编代码:
; Created with MASM
.386
.MODEL FLAT, stdcall
.STACK 100h
ExitProcess PROTO, dwExitCode:DWORD
extern testFunc : proto
.CODE
_main PROC
call testFunc
xor edi, edi
INVOKE ExitProcess, 0
_main ENDP
END
还有我的 C++ 代码:
#include <iostream>
using namespace std;
extern "C" void _main();
extern "C" void testFunc()
{
cout << "Hello world";
}
int main()
{
_main();
return 0;
}
【问题讨论】:
-
什么C编译器? MSVC?
-
如果这是普通的 Windows,
foo的 asm 符号名称是 32 位代码(不是 64 位)的_foo。所以在 asm 中,你的_main定义是定义 C 函数main,而不是_main,除非 MASM 正在添加另一个级别的修改。最好选择完全不同的东西,比如asm_main,不会出乎意料地发生冲突。 -
是的,使用 Visual Studio 社区 2019。即使我改变它,它也会说找不到函数定义“asm_main”。我觉得我缺少理解这一点的基本内容。
-
哇。我没有返回函数!
标签: c++ assembly visual-c++ x86 masm