トップ 一覧 Farm 検索 ヘルプ RSS ログイン

Objective-Cでいこうの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
{{category プログラミング}}
{{category FreeBSD}}
{{category Objective-C}}



Objective-Cという言語については,[このページ|http://wisdom.sakura.ne.jp/programming/objc/index.html]が参考になります.
以降はFreeBSD上にObjective-Cな環境を構築して,コンパイルするまでのメモです.

!FreeBSDでObjective-C
==FreeBSDを標準の環境でインストールした場合,デフォルトのgccでObjective-Cは扱えないなようです.==(FreeBSD 6.0-RELEASEでは、コンパイルできるようです。)
Objective-Cを使う場合には,gccのObjectクラスよりGNUstepを使ってプログラミングする方が便利なので,とりあえず,GNUStepをインストールしましょう.==portsの場合,devel/gnustepです.gccも一緒にコンパイルされます.2005年1月30日現在では,/usr/local/bin/gcc33として,インストールされます.==
GNUstepは/usr/local/GNUstep以下にインストールされます.

!とりあえずHelloWorld.
Objective-CではCで書いたプログラムが普通にコンパイルできるので,
 #include <stdio.h>
 int main(int argc, char **argv){
     printf("Hello World.?n");
 }
を,test.mという名前で保存して,
 % gcc test.m -lobjc
とかやってコンパイルできます.
pthread関係のライブラリのリンクで怒られる場合には、
 % gcc test.m -lobj.c -pthread
として、pthreadオプションを明示的に指定しなければいけません。

!Objective-CでHelloWorld.
とりあえず,オブジェクト作るサンプル.
 #include <stdio.h>
 #include <objc/Object.h>
 
 @interface Hoge : Object
 -(void)fefe
 @end
 
 @implementation Hoge
 -(void)fefe{
     printf("Hello World.?n");
 }
 @end
 
 int main(int argc, char **argv){
     Hoge * hoge = [Hoge alloc];
     [hoge fefe];
     return 0;
 }

!NSObject
GNUstepで提供されている,NSObjectを使おう.ということで,ソースコードはこんな感じ.今度はObjectクラスのかわりにNSObjectを継承しています.
 #include <stdio.h>
 #include <Foundation/NSObject.h>
 
 @interface Hoge : NSObject
 - (void) fefe;
 @end
 
 @implementation Hoge
 
 -(void)fefe{
   printf("Hello World.?n");
 }
 
 @end
 
 int main(int argc, char **argv){
   id hoge = [Hoge alloc];
   [hoge init];
   [hoge fefe];
   [hoge dealloc];
 }

ファイル名がtest.mであれば,コンパイルはこんな感じ

 % gcc test.m -I/usr/local/GNUstep/System/Library/Headers \
 % gcc test.m -I/usr/local/GNUstep/System/Library/Headers ?
 -L/usr/local/GNUstep/System/Library/Libraries -lgnustep-base

インクルードパスと,ライブラリパスに注意する必要があるよ,ということです.
もし、objc_get_classが解決できないなどのエラーがでる場合には、-lobjcを指定しなければなりません。
実行時には,LD_LIBRARY_PATHに/usr/local/GNUstep/System/Library/Librariesを追加した上で,
 % ./a.out
とするか、
 % LD_LIBRARY_PATH=/usr/local/GNUstep/System/Library/Libraries ./a.out
とかです.

!#include?#import?
gcc3.3では、#importを使っていると、なぜか警告がでましたが、gcc3.4ではでないようです。