尝试在 cpp 模块中使用汇编代码时出现链接器错误

Linker error while trying to use assembler code in cpp module

我正在使用 visual studio 2013 并尝试 运行 简单的 nasm 代码。

main.cpp:

#include "Header.h"
void _printf() {
    printf("HELLO\n");
}

int main()
{
    sayHello();
    return 0;
}

Header.h:

#include <stdio.h>

void _printf();

extern "C" {
    void sayHello();
}

和 asm 文件 hello.asm:

SECTION .text

EXTERN _printf

global sayHello
sayHello:
    push ebx
    call _printf
    pop ebx
ret

之后我得到以下错误:

Error   1   error LNK2019: unresolved external symbol _sayHello referenced in function _main    c:\Users\art.mhtr\documents\visual studio 2013\Projects\ConsoleApplication8\ConsoleApplication8\main.obj    ConsoleApplication8

如果您阅读错误消息,您会发现它找不到的函数名为 _sayHello。注意前导下划线。

要解决您的问题,您必须使用前导下划线命名您的汇编程序函数:

global _sayHello
_sayHello:
    ...