コマンドラインでObjective-Cプログラムをコンパイルする
1421 ワード
詳細
最近Objcの開発を見ていますが、Xcodeは使いやすいですが、このような大型のIDE開発にはあまり慣れていません.そこで自分でTerminalの下でコンパイルしてみました.まず最も簡単なプログラムです.
直接gcc helloworld.m、新聞を間違えた.
エラーメッセージは次のとおりです.
ライブラリがロードされていないかもしれないと推測し、gcc hellowldに切り替えた.m-lobjcコンパイルは、依然として同じエラーです.
libの位置が間違っている可能性があると推測し、findは「Foundation」というframeworkの位置を確認し、以下のコマンドでコンパイルしました.
同じ間違いです.
仕方なくman gccは最初から尾を見た.またgoogleに行ってgcc for macosx.-frameworkのオプションが見つかりました.試してみました.
とうとう成功した.
まとめます:macosxの下で、objcのシステム呼び出しはすべてframeworkの中に統合されています.コンパイルするには、-frameworkオプションでframeworkを含まなければなりません.
最近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を含まなければなりません.