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

时间:2016-03-24 11:41:36

标签: c++ c visual-studio assembly nasm

我正在使用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

1 个答案:

答案 0 :(得分:3)

如果您阅读错误消息,您将看到它找不到的功能名为_sayHello。请注意前导下划线。

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

global _sayHello
_sayHello:
    ...