- ベストアンサー
Objective-cで@"Foo"が使えない
- Objective-cの環境で@"Foo"を使用するとエラーが発生する原因について質問します。
- Ubuntu10.04+clang+gnustep環境で@を使ってNSStringインスタンスを生成しようとするとエラーが発生します。
- コンパイルではエラーが出ず、実行時にエラーが発生し、具体的な原因がわかりません。どのような環境で@が利用できるのか、他のブログなどで使えると書かれているのに自分が使えない理由がわかりません。ヒントを教えていただけると助かります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 Ubuntu10.10 に clang、GNUstep、Objective-Cをインストールして みましたが、問題なくコンパイルできますね。 不足しているパッケージが無いか確認してみてはいかがでしょう。 【サンプルソース】 #import <Foundation/Foundation.h> int main(int argc, const char* argv[]) { NSString *str1 = @"Hello GNUStep"; NSLog(@"%@", str1); NSString *str2 = [[NSString alloc] initWithUTF8String:"Hello Objective-C"]; NSLog(@"%@", str2); return 0; } 【コンパイル方法】 $ gcc -lobjc -lgnustep-base -I/usr/lib/gcc/i686-linux-gnu/4.4/include -I/usr/include/GNUstep -fconstant-string-class=NSConstantString oshiete.m または、 $ clang -lobjc -lgnustep-base -I/usr/lib/gcc/i686-linux-gnu/4.4/include -I/usr/include/GNUstep -fconstant-string-class=NSConstantString oshiete.m (オプションは同じです。コマンドが違うだけです。) 【実行】 $ ./a.out 2010-12-26 00:21:53.287 a.out[16348] Hello GNUStep 2010-12-26 00:21:53.289 a.out[16348] Hello Objective-C
お礼
ありがとうございます。 差は「-fconstant-string-class=NSConstantString」のようですね。 手元で追加してみたところ、無事動作しました。 constant-string-classで@指定時にどのクラスオブジェクトを生成するか 指定することができて、デフォルトはNXConstantStringのようですね。 gccの場合は。 clangの場合はなんだか分からなかったですが、コンパイルは通るものの 実行時にセグメンテーションフォルトになるような何らかのクラスが デフォルトなのでしょうね。 分かり難っ! わざわざインストールまでして確認していただいてありがとうございました。 おかげ様で無事解決です。