トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

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ではでないようです。