将intel nasm x86_64与C ++链接起来不会成功

时间:2017-01-11 19:23:52

标签: c++ assembly nasm extern

我正在尝试使用汇编中的一些计算在C ++中创建项目。现在我试图让asm函数在C ++中工作,但没有成功。

;nasm_loop.asm

section .text

global asmfunc


asmfunc:
    push ebp
    pop ebp
    ret

生成文件:

OBJS = source.cpp

CC = g++

COMPILER_FLAGS = -w

LINKER_FLAGS = -lSDL2

OBJ_NAME = sdltest

all: nasm_test.o $(OBJS)
    nasm -f elf64 -o nasm_test.o nasm_test.asm
    $(CC) nasm_test.o $(OBJS) $(COMPILER_FLAGS) $(LINKER_FLAGS) -o $(OBJ_NAME) 

nasm_test.o: nasm_test.asm
    nasm -f elf64 -o nasm_test.o nasm_test.asm



// source.cpp 
extern "C" void asmfunc();

int main()
{
    //...
    asmfunc();
    //...
}

并输出:

lis@lis:~/Desktop/test2$ make
nasm -f elf64 -o nasm_test.o nasm_test.asm
g++ nasm_test.o source.cpp -w -lSDL2 -o sdltest 
/tmp/ccI33KiB.o: In function `main':
source.cpp:(.text+0x5bb): undefined reference to `asmfunc'
collect2: error: ld returned 1 exit status
Makefile:12: recipe for target 'all' failed
make: *** [all] Error 1

我在这里做错了什么?我错过了什么链接这些文件?

我只需要纠正Makefile,谢谢你们

OBJS = source.cpp

CC = g++

COMPILER_FLAGS = -w

LINKER_FLAGS = -lSDL2

OBJ_NAME = sdltest

all: nasm_loop.o $(OBJS) 
    $(CC) nasm_loop.o $(OBJS) $(COMPILER_FLAGS) $(LINKER_FLAGS) -o $(OBJ_NAME) 

nasm_loop.o: nasm_loop.asm
    nasm -f elf64 -o nasm_loop.o nasm_loop.asm

0 个答案:

没有答案