NeXTのMulti Architecture Binaryそのものと言える技術「Universal Binary」。前回に引き続き、Universal Binaryの詳細を解説していこう。
Appleの配布するMac OS X標準の開発環境Xcodeを使ってアプリケーションを開発している場合は、図1にあるようにプロジェクトを選択、情報パネルを開き「ビルド」タブの「アーキテクチャ」項目で指定を行う。この項目が空か$(NATIVE_ARCH)となっている場合は、開発しているマシンのCPUに応じたコードのみが生成される。「アーキテクチャ」の文字をダブルクリックするとシートが表示され(図2)、ここにチェックを入れ選択すると指定アーキテクチャ向けコードがコンパイルされるようになる。複数のアーキテクチャにチェックを入れれば、自動的にUniversal Binaryとしてビルドされる。
なお、この設定はビルドの構成*ごとに指定できる。Debugの構成の場合は指定を行わず、Release構成の場合のみUniversal Binaryにしておけば、開発中の絶え間ない再コンパイルを効率的に流すことができる。
Universal Binaryをビルドする場合、そのアーキテクチャの共有ライブラリがすべて存在していなければならない。通常のMac OS Xでは/usr/lib以下のライブラリはそのCPUに対応するコードしか入っていないため、PowerPC搭載Macではx86のコードを生成できず、逆にIntel CPUを使ったMacではppcやppc64のコードを生成できない。
Xcodeではこうした問題に対処するため「Cross Development SDK」という枠組みが用意されている。Cross Development SDKは開発対象(ターゲット)ごとにビルド時にのみ使用する共有ライブラリのスタブ(stub)*だけを集めたパッケージ用意し、実際のライブラリの代わりにこのスタブを使用してリンクすることでこうした問題を回避するというものだ。
Universal Binaryをビルドする場合は、あらかじめXcodeのリリースメディアから「Mac OS X 10.4(Universal) SDK」パッケージをインストールしておき、先の情報パネルの「一般」タブにある「ターゲットSDKを使用したクロス開発」の項目から「Mac OS X 10.4 (Universal)」を選択しターゲットSDKを利用してビルドする必要がある(図3、コラム1)。
Visual Studioと同じく、Xcodeもコンパイラに渡すオプションやどのファイルをコンパイルするかなどといった設定をセットにして、一括して切り替えられる。このセットのことを構成と呼んでいる。Visual Studioと同じく、開発向けの最適化がほとんどされないDebugと、最適化が適用されるリリース用のReleaseの2つの構成がデフォルトで用意される。
もともとは切り株のこと。実際のモジュールが存在しないときに、その代用となる仮のモジュールをスタブという。Cross Development SDKの中にある共有ライブラリは、一見実物と同じように見えるが、関数のシンボルなどリンクに必要な情報があるだけで、実体のコードが入っていない、リンクを推敲するためだけの代用品であるため、スタブと呼ばれている。
Copyright © ITmedia, Inc. All Rights Reserved.