Я написал функцию nabs в файле сборки math.nasm.
следующим образом
%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
Я вызываю эту функцию из функции c func1 в файле myfunc.c
Я использую ассемблер nasm для файла сборки. Я использую версию X-code 3.1 и компилятор gcc 4.0, которые я определил USE_x86_ASM
в настройках XCode Настройки проекта / Build / NASM Опции сборки / другие флаги AS -DUSE_X86_ASM
Также я определил этот препроцессор в заголовочном файле myfunc.h также
Я объявил nABS в myfunc.h как
#define USE_x86_ASM
int nABS(int a);
и включил myfunc.h в myfunc.c
И 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:
толкать
......
......
pop ebx
RET
Тем не менее я получаю ту же ошибку компоновки, файл скомпилирован, но я получаю ту же ошибку компоновки.
Я проверил, что сгенерированный .o включен app.LinkFileList.