【发布时间】:2023-03-16 08:50:02
【问题描述】:
我在汇编文件 math.nasm 中写了一个函数 nabs 如下
%ifdef USE_x86_ASM
SECTION .text
cglobal nABS
;*------------------------*
;* int nABS(int a) *
;* return value in eax *
;*------------------------*
ALIGN 16
nABS:
push ebx
......
......
pop ebx
ret
%endif
我正在从文件 myfunc.c 中的 c 函数 func1 调用此函数
我正在对汇编文件使用 nasm 汇编器 我正在使用 X-code 3.1 版本和 gcc 4.0 编译器 我已经定义了 USE_x86_ASM
在 Xcode 设置 Project Settings/Build/NASM BUILD OPTIONs/OTHER FLAGS AS -DUSE_X86_ASM
我还在头文件 myfunc.h 中定义了这个预处理器
我在 myfunc.h 中将 nABS 声明为
#define USE_x86_ASM
int nABS(int a);
并在 myfunc.c 中包含 myfunc.h
myfunc.c 和 math.nasm 都被编译并生成 math.o 和 myfunc.o,但我得到一个链接错误
Undefined symbols:
"_nABS", referenced from:
_func1 in myFunc.o
谁能告诉我为什么会出现链接错误?
我做了建议的修改另外我删除了%ifdef条件修改后的代码如下
.text
.align 2
.globl _nABS
.private_extern _nABS
_nABS:
推 ebx
……
……
流行 ebx
ret
在编译文件时我仍然遇到相同的链接错误,但我得到相同的链接错误。
我检查了生成的 .o 是否包含 app.LinkFileList。
【问题讨论】:
标签: objective-c xcode assembly nasm