0

谁能告诉我为什么我不能从 NASM 调用任何全局函数,除了main ?(在你问之前)是的,我已经在 stackoverflow 和互联网上阅读了所有关于此的问题大约 8 小时。

C++ 代码。

void main();

extern "C" void nasm_function(void);

void c_function()
{
}

void main()
{
    nasm_function();

    system("pause");
}

NASM 代码,

extern _c_function
extern _main

segment .text

global _nasm_function
_nasm_function:
call _main  
call _c_function

输出,

1>链接... 1>my_asm.obj : 错误 LNK2001: 无法解析的外部符号 _c_function 1>F:\Projects\OSDev\assmebly_test\Debug\project.exe : 致命错误 LNK1120: 1 无法解析的外部

如您所见,我们没有得到 main 的链接错误。我不知道为什么。:)

设置,

building nasm using custom-build-rules with nasm.exe -f win32 
Calling convention is __cdecl (/Gd)
Visual Studio 2008
NASM version 2.05
Didn't include my_asm.obj as a input to linker

任何人请告诉我是什么问题?提前致谢。(请注意,这是一个示例程序,但仍然存在问题)

4

1 回答 1

1

问题是名称修饰。解决办法是extern "C"

于 2012-08-05T13:32:58.347 回答