次のように、アセンブリ ファイル 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 コード 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.c に myfunc.h を含めました myfunc.c と math.nasm の
両方が sussessful にコンパイルされ、math.o と myfunc.o が生成されますが、リンク エラーが発生します
Undefined symbols:
"_nABS", referenced from:
_func1 in myFunc.o
リンクエラーが発生する理由を誰か教えてもらえますか?
提案された変更を行い、さらに%ifdef条件を削除しました変更されたコードは次のとおりです
.text
.align 2
.globl _nABS
.private_extern _nABS
_nABS: push ebx ...... ...... pop ebx
ret まだファイルがコンパイルされているのと同じリンク エラーが発生しますが、同じリンク エラーが発生します。生成された .o に app.LinkFileList が含まれていることを確認しました。