ラベル objc svn scm の投稿を表示しています。 すべての投稿を表示
ラベル objc svn scm の投稿を表示しています。 すべての投稿を表示

2008/07/01

Subversionを入れてみた

サンプルコードを参考にしながらcocoaのアプリケーションを作ってみた。なんとなく動くがものすごく手探りな状態。やはりSCMが無いと怖いので、とりあえずfinkを入れて、subversionをapt-getした。
どうせ一人しか使わないので、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でも動くと便利なんだけど。