2009-04-26 19 views
0

をアセンブリルーチンを呼び出すと、アセンブリファイルmath.nasm にNABS私が使用していたファイルmyfunc.c
でC関数func1のからこの関数を呼び出しています私はXcodeの設定プロジェクトの設定にXcodeの3.1バージョンと私はUSE_x86_ASM私は機能を書かれている客観Cで

を定義しているGCC 4.0コンパイラを使用していますアセンブリファイル用NASMアセンブラは、//NASMを構築-DUSE_X86_ASM
はまた、私はこの前に定義されているなどのオプション/他のフラグを構築-procesヘッダファイルmyfunc.hでSORも
Iは

#define USE_x86_ASM 
int nABS(int a); 

としてmyfunc.hにNABSを宣言し、両方myfunc.cとmath.nasmはsussessfulyコンパイル生成さmyfunc.c
でmyfunc.hが含まれていますmath.oとmyfunc.oが、私はリンクエラーを取得する

Undefined symbols: 
    "_nABS", referenced from: 
     _func1 in myFunc.o 

は、誰もが、なぜ私がリンクエラーを取得しています私に言うことができますか?


私は変更私は

.text 
.align 2 
.globl _nABS 
.private_extern _nABS 

_nABS次のように変更されたコードである条件IFDEF%を除去するだけで提案た: プッシュEBX ......を..... pop ebx
ret まだ同じリンクエラーが発生していますが、ファイルがコンパイルされていますが、同じリンクエラーが発生します。 生成された.oがapp.LinkFileListに含まれていることを確認しました。

答えて

1

一部のCコンパイラは、Cシンボルに先行するアンダースコアを追加します。アセンブリファイルのラベルにアンダースコアを追加してください(もちろん、globlディレクティブ)。

1

Mehradこれは動作するはず 権利である

%ifdef USE_x86_ASM 
SECTION .text 

;*------------------------* 
;* int nABS(int a)  *  
;* return value in eax *  
;*------------------------* 
ALIGN 16 
global _nABS 
    nABS: 
     push ebx 
     ...... 
       ...... 
       pop ebx   
     ret 
%endif 
関連する問題