- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
{{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ではでないようです。