OSX では主に ObjectiveC 言語が中心に使われています。
ObjectiveC 言語 を使えば Interface Builder を使用してCocoa アプリケーションが開発されています。
しかし、C++ 言語 を使う場合は、 ターミナルから実行するアプリケーションしか作れないようです。
そのため C++ 言語を 使って Cocoa アプリを開発したり、C++言語で書かれたライブラリを組み込む場合には
ObjectiveC と C++ を併用する Objective-C++ を利用する必要がある。
Objective-C++ では、ObjectiveC言語 も C++言語も C言語 を混ぜて使う事ができます。
幸い、すばらしいチュートリアルを見つけることができたので紹介しておきます。
Objective-C++ tutorial (英語)
Objective-C++ tutorial (areax.net)
( メニューから Projects >Objective-C++/を選択して、 PDFファイルをダウンロードする。 )
チュートリアルを作成された方に、感謝いたします!
まずは、習うより慣れろということで、とりあえず既にあるObjective-C++で書かれたプログラムをコンパイルしてみることにした。
objcpp.pdf (文書)
と
objcgl-1.tar.gz(サンプルソース)
を ダウンロードします。
objcpp.pdf (文書)の内容をかいつまんで紹介すると、
Chapter2 (15ページ) C++ の hello world コードを Cocoa Objective-C++使う。
Chapter3 (20ページ) GLUT+OpenGLを Cocoa Objective-C++使う。
Chapter4 (29ページ) C++ の Class を Cocoa Objective-C ++ で使う。
objcgl-1.tar.gz のソースをコンパイルしてみます。これはOpenGL を使って3D ポリゴンオブジェクト(.plyファイル)を表示するデモだそうです。
GLUT+OpenGLを Cocoa Objective-C++ で利用するため、GLUTが必要になります。(OSXにははじめからインストールされているらしい)
objcgl-1.tar.gz を解凍されたフォルダから、
ObjCGL.pbproj をダブルクリックするとXcode が立ち上がります。
ダイアログで 「古いProject ですがよろしいですか?」
のようなことを聞いてきますが、かまわず読み込ませます。
当然古いProjectBuilder で作られたものなので、 Xcode1.1 ではそのままでは動きません。
次のようなエラーが発生します。
main.mm:15: error: `endl' undeclared (first use this function)
Model.h:30: error: parse error before `&' token
Model.mm:73: error: parse error before `&' token
Model.h:30: error: parse error before `&' token
Model.mm:86: error: `buffer' was not declared in this scope
Model.mm:43: error: `cout' undeclared (first use this function)
Model.mm:43: error: `endl' undeclared (first use this function)
Model.mm:86: initializer list being treated as compound expression
もしこのようなエラーが表示されたら
#import <iostream>
using namespace std;
↑をソースに 追加してください。(endl,cout は iostream 関連)
もし
Error--can't open model file bunny.ply
というエラーメッセージが表示されたら、
bunny.ply を プロジェクトディレクトリ内にある build ディレクトリに移動すると読み込みます。
コンパイルが成功して実行すると、次のようなウインドウが現れます。
bunny.ply ファイル の 中身、3D ポリゴンモデルの うさぎが表示されました。
あとは、objcpp.pdf を読んで、ObjectiveC++ の基本をつかむとコツがわかるかもしれません。
Xcode が最低限どのような設定になっていれば、Objective-C++ が使えるか。
参考- Xcode の設定 :
「グループとファイル」ツリーの「External Frameworks」 フォルダ
usr/lib ディレクトリから
libstdc++.a
(Objective-C++ の利用によっては , この libstdc++.a は必要ない場合もある。)
framework ディレクトリから
Cocoa.framework
OpenGL.framework
GLUT.framework
GCC コンパイラ設定 GCC v3.3
すべての警告をエラ−として取り扱う チェックなし
デバッグシンボルを生成する チェック
最適化 プレバインド チェック
コードサイズの最適化 -Os
FRAMEWORK_SEARCH_PATHS =
HEADER_SEARCH_PATHS =
INSTALL_PATH += "$(HOME)/bin"
LIBRARY_SEARCH_PATHS =
OTHER_CFLAGS =
OTHER_LDFLAGS =
OTHER_REZFLAGS =
PRODUCT_NAME = ObjCGL
REZ_EXECUTABLE = YES
SECTORDER_FLAGS =
WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"
試しに、Xcodeの新規プロジェクトで Allegro (C言語) アプリケーションを選択して、それをベースに josha氏のチュートリアルのソース ( Objective-C++ ) を組み込んでみたところ。

赤い線が引いてあるところに手を加えました。Xcode のAllegroアプリケーション プロジェクトは、 main.c という名前ですが、これを main.mm という名前を変更しています。
拡張子をmmにしても、Allegroのアプリケーションとしてコンパイルされました。
C言語のコードも Objective-Cのコードも C++ のコードも入っていますが、とくに問題なく 動いています!
また、Cocoaの基本部分はAllegroで隠蔽されているので、C言語から学ぶこともできるかもしれません。
Obj-C と Obj-C++ 参考文献 :
HappyMacintoshDevelopingTime( BNN, 木下誠著)
Appleの文書- Objective-C プログラミング言語
http://developer.apple.com
Appleの文書
http://developer.apple.com/
Objective-C概要 - 出典: フリー百科事典『ウィキペディア(Wikipedia):(ObjectiveC言語の成立と概要)
http://ja.wikipedia.org/wiki/Objective-C
Cocoa倶楽部(仮称):(メモリの割り当てと開放)
http://wwwa.dcns.ne.jp/~nito/CocoaClub/index.html
cabi@net - C++プログラマ(というか自分)のためのObjective-C講座(というかメモ):(C++言語との比較)
http://www.cabinetwork.jp/doc/objective-c.html
Cocoa でいこう Mac らしく
http://www.remus.dti.ne.jp/~yoshiki/cocoa/ed1/index.html
Objective-C入門:(基本部分/Cocoa と違う部分もあるので注意)
http://wisdom.sakura.ne.jp/programming/objc/
Netaro Web - Cocoa Programing:(インスタンスの作成について)
http://netaro.ddo.jp/
Objective-C Beginner's Guide (英語)
http://www.otierney.net/objective-c.html
Objective-C++ tutorial (英語)
http://cs.northwestern.edu/~josha/
( メニューから Projects >Objective-C++/ PDFファイルをダウンロードする。 )
Chapter2 (15ページ) C++ hello world コードを Cocoa Objective-C++使う。
Chapter3 (20ページ) GLUT+OpenGLを Cocoa Objective-C++使う。
Chapter4 (29ページ) C++ の Class を Cocoa Objective-C ++ で使う。
C++ Versus Objective-C (英語)
http://www.mactech.com/articles/mactech/Vol.13/13.03/CandObjectiveCCompared/