コマンドラインでObjective-Cプログラムをコンパイルする


詳細
最近Objcの開発を見ていますが、Xcodeは使いやすいですが、このような大型のIDE開発にはあまり慣れていません.そこで自分でTerminalの下でコンパイルしてみました.まず最も簡単なプログラムです.
#import 

int main(int argc, const char *argv[])
{
    NSLog(@"Hello, World!");
    return 0;

}

 
直接gcc helloworld.m、新聞を間違えた.
エラーメッセージは次のとおりです.
 
Undefined symbols:
  "___CFConstantStringClassReference", referenced from:
      cfstring=Hello, World! in ccCxrkF8.o
  "_NSLog", referenced from:
      _main in ccCxrkF8.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
 
 
ライブラリがロードされていないかもしれないと推測し、gcc hellowldに切り替えた.m-lobjcコンパイルは、依然として同じエラーです.
 
libの位置が間違っている可能性があると推測し、findは「Foundation」というframeworkの位置を確認し、以下のコマンドでコンパイルしました.
 
gcc helloworld.m -L/System/Library/Frameworks/Foundation.framework/

 
同じ間違いです.
 
仕方なくman gccは最初から尾を見た.またgoogleに行ってgcc for macosx.-frameworkのオプションが見つかりました.試してみました.
 
gcc helloworld.m -framework Foundation

 
とうとう成功した.
 
2010-04-22 19:11:11.643 a.out[8932:903] Hello, World!
 
 
まとめます:macosxの下で、objcのシステム呼び出しはすべてframeworkの中に統合されています.コンパイルするには、-frameworkオプションでframeworkを含まなければなりません.