どうせ一人しか使わないので、svnadmin create ~/var/lib/svn でhomeの下にレポジトリを作って使うことにする。
ここまでやって、やはりObjective-Cがわかっていないと進まないことを痛感する。
10数年前に使っていあたはずなのだが、まったく覚えていない・・・・・
とりあえず、下記のようなコードを書いてみて、
#import
#import
@interface Hello : Object
- (void)say;
@end
@implementation Hello
- (void)say {
printf("Hello world\n");
}
@end
int main() {
id obj = [Hello alloc];
[obj say];
return 0;
}
コンパイルしてみる
$ gcc hello.mだめだ。
Undefined symbols:
".objc_class_name_Object", referenced from:
.objc_class_name_Hello in ccjQ8A00.o
"_objc_msgSend", referenced from:
_main in ccjQ8A00.o
_main in ccjQ8A00.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
$
「.objc_class_name_Object」は、基底クラスっぽい。「_objc_msgSend」は、メッセージ送信のメソッドかな?Objectから派生するのを止めて、mainでアロックとメッセージパッシングを止めたらリンクできた。
ライブラリが足りないだけのようなので「ググって」みる。どうも、libobjcがリンクされていないのが原因らしい。
動いた!
$gcc -lobjc hello.m
$./a.out
Hello world
$
同じことをcygwin/gccでもやってみた。
動かない・・・・・
$ gcc -lobjc hello.m
....cc2TPXNs.o:hello.m:(.text+0x47): undefined reference to `_objc_get_class'
....cc2TPXNs.o:hello.m:(.text+0x59): undefined reference to `_objc_msg_lookup'
....cc2TPXNs.o:hello.m:(.text+0x7c): undefined reference to `_objc_msg_lookup'
....cc2TPXNs.o:hello.m:(.text+0xa5): undefined reference to `___objc_exec_class'
....cc2TPXNs.o:hello.m:(.data+0xe4): undefined reference to `___objc_class_name_Object'
残念。Windowsでも動くと便利なんだけど。