我正在尝试使用汇编中的一些计算在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