尝试在 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:
...
我正在使用 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:
...