NSで始まる関数名、クラス名は、AppleのCocoaフレームワークで定義されているものですから、Mac OS X上の開発環境、Xcode以外には実装されていないのでしょう。
Mac OS Xは、NEXT社のOpenStepを前身としていて、そのOpenStepは、NextStepを前身としていました。NSはNextStepで実装したフレームワークであることを意味しています。
なので、NextStepから分派したObjective-Cなら、NSLogが実装されているかもしれませんが、その前の段階で分派したObjective-Cなら実装していないでしょう。
Objective-Cは、C言語をそのまま記述できるので、標準出力は、printfを使えます。
文字列の頭に@がついているものは、NSStringの文字列であることを意味します。Cの文字列はただ「"~"」と記述します。なので、「NSLog("Hello, World!")」だと、使える可能性はありますね。
UbuntuでObjective-Cを使おうとする理由が、理解できませんが、興味本位以外の動機があるのでしたら、Macintoshを購入することをお勧めします。Xcodeが標準で付属しますし、Appleのサイトから最新バージョンを無料でダウンロードできます(要無料会員登録)。
http://snap.sonydeveloper.com/
ひょっとして、これでしょうか?
お礼
ご指摘のインポートでは変化はありませんでした。 教えていただいたサイトはgcc使ってるようなので、同じようにgccでもやってみましたが やはりエラーでした。 $ gcc -lobjc -lgnustep-base -I/usr/include/GNUstep -I/usr/lib/gcc/i486-linux-gnu/4.4/include -g -Wall oshiete.m -o oshiete oshiete.m: In function ‘main’: oshiete.m:7: error: cannot find interface declaration for ‘NXConstantString’ どうも@を使った書き方が気に入らないようです。そこで、@でNSstringのインスタンスを 作らずに、明示的に作る方法でやってみたところ、ログ出力が得られました! NSString *str = [[NSString alloc] initWithUTF8String:"Hello World."]; NSLog(str); // <- この方法だとOK コンパイラをclangに変更しても警告1つで動作自体はOKでした。 では、なぜ@がいけないのか。 ソースはUTF8で作成しているのですが…。 NSLog自体は動作したので、@が使えない問題を改めて質問してみることにします。 ありがとうございました。