Objective-C++ プログラミングに関するメモ

 
ここに書かれたメモの正確性は保証しません。

Objective-C++ を学ぶ 手がかり

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++で書かれたプログラムをコンパイルしてみることにした。

 OpenGL と 3Dを使ったデモをコンパイル

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++ の基本をつかむとコツがわかるかもしれません。

その他、 C, C++ , Objective-C をいっぺんに学ぶ

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/

その他、メモ


cout<<" 〜 "; を使って変数を表示することが可能。
もし、HID_MENU 関係の エラーが出たら
-framework OpenGL -framework Carbon をリンカ設定に追加。

OSX では、ファイルサイズを取得する filelength()が使えないので、この関数が使われているとコンパイルが失敗する。 UNIX では その代わりに、stat を使用する。
Last modified 2005/06/23 Xcode 上で Allegro + Objective-C++

Tsukubado