Objective-Cでいこう
[プログラミング]
[FreeBSD]
[Objective-C]
Objective-Cという言語については,このページが参考になります.
以降は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 ? -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ではでないようです。