2012-02-18 15 views
10

私はObjective-C言語を学んでいます。私はMacを持っていないので、Ubuntu 11.04プラットフォーム内で自分のコードをコンパイルして実行しています。問題クランでのObjective Cをコンパイルする(Ubuntuの)

今まで、私はコンパイルにはgccを使用していました。私はGNUStepをインストールして、すべて動作していました。しかし、gccが許さない@propertyや@synthesizeのようなObjective-C 2.0の機能を試し始めました。

は、だから私は、クランとのコードをコンパイルしようとしたが、正しくないとしても、単純なのHello worldプログラムで、GNUstepのライブラリと私のコードをリンクされていないようです。私は次のコードをコンパイルする場合

たとえば、:

#import <Foundation/Foundation.h> 

int main(void) { 
    NSLog(@"Hello world!"); 
    return 0; 
} 

コンパイラの出力を次のとおりです。私はコンパイルするために使用しているコマンドは

clang -I /usr/include/GNUstep/ test.m -o test 
/tmp/cc-dHZIp1.o: In function `main': 
test.m:(.text+0x1f): undefined reference to `NSLog' 
/tmp/cc-dHZIp1.o: In function `.objc_load_function': 
test.m:(.text+0x3c): undefined reference to `__objc_exec_class' 
collect2: ld returned 1 exit status 
clang: error: linker (via gcc) command failed with exit code 1 (use -v to see invocation) 

ある

GNUstepのライブラリを含むように-Iディレクティブで

(そうでない場合は、クランはFoundation.hを見つけることができません)。

私は私の問題をGoogleで検索し、両方のGNUstepとクランWebページを訪問しましたが、私はそれに対する解決策を見つけていないました。だから、どんな助けにも感謝します。

ありがとうございます!

答えて

1

あなたは、GCCコンパイラを試すことができます。すべてのインストールGNU Objective-Cランタイムの
まず:sudo apt-get install gobjc
は、その後コンパイル:gcc -o hello hello.m -Wall -lobjc

+0

こんにちはURLArenzo:ここではあなたのためにすべてを行いUbuntuのためのスクリプトです。私はすでにそのパッケージをインストールしていて、gccをコンパイルしようとしました(完全に動作していました)。しかし、gccはObjective-C 2.0のいくつかの機能を許可していないことを理解しました。だから私はClangコンパイラで動作させるようにしています。 –

6

問題は、ライブラリGNUstepのベースは、リンカで使用されていなかったということでした。だから、これに対する解決策を打ち鳴らすことにより、使用するリンカーに引数を送るオプション-Xlinker、使用していました:

clang -I /usr/include/GNUstep/ -Xlinker -lgnustep-base test.m -o test 

声明「-Xリンカ-lgnustepベースを」魔法を作りました。しかし、私はObjective-Cの中の文字列を表すクラスに関連し、このコマンドに問題がありました:

./test: Uncaught exception NSInvalidArgumentException, reason: GSFFIInvocation: 
Class 'NXConstantString'(instance) does not respond to forwardInvocation: for 
'hasSuffix:' 

私は、引数「-fconstant文字列クラス= NSConstantString」を追加し、それを解決することができます:

clang -I /usr/include/GNUstep/ -fconstant-string-class=NSConstantString \ 
-Xlinker -lgnustep-base test.m -o test 
また

、私は、コードのいくつかのObjective-C 2.0の部分で試してみた、動作しているようです。

ありがとうございました!