連載
» 2007年12月27日 04時23分 UPDATE

Undocumented Mac OS X:第13回 Universal Binary【後編】 (1/4)

NeXTのMulti Architecture Binaryそのものと言える技術「Universal Binary」。前回に引き続き、Universal Binaryの詳細を解説していこう。

[白山貴之,ITmedia]

Xcodeを使ったUniversal Binaryの作成

 Appleの配布するMac OS X標準の開発環境Xcodeを使ってアプリケーションを開発している場合は、図1にあるようにプロジェクトを選択、情報パネルを開き「ビルド」タブの「アーキテクチャ」項目で指定を行う。この項目が空か$(NATIVE_ARCH)となっている場合は、開発しているマシンのCPUに応じたコードのみが生成される。「アーキテクチャ」の文字をダブルクリックするとシートが表示され(図2)、ここにチェックを入れ選択すると指定アーキテクチャ向けコードがコンパイルされるようになる。複数のアーキテクチャにチェックを入れれば、自動的にUniversal Binaryとしてビルドされる。

図1 図1 ツリーの最上段に当たるプロジェクトでコンテクストメニューを開き、[情報を見る]を選択すると情報パネルが開く。なお、プロジェクトに関してはダブルクリックしても情報を見ることができる
図2 図2 設定の「アーキテクチャ」の文字をダブルクリックすると対象のアーキテクチャを選択できる

 なお、この設定はビルドの構成*ごとに指定できる。Debugの構成の場合は指定を行わず、Release構成の場合のみUniversal Binaryにしておけば、開発中の絶え間ない再コンパイルを効率的に流すことができる。

Cross Development SDK

 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)

図3 図3 ターゲットSDKの指定はビルドのタブの設定からパスを入力してもよいが、一般タブの「ターゲットSDKを使用したクロス開発」なら、ポップアップメニューでインストールされているターゲットSDKを手軽に選べる

このページで出てきた専門用語

ビルドの構成

Visual Studioと同じく、Xcodeもコンパイラに渡すオプションやどのファイルをコンパイルするかなどといった設定をセットにして、一括して切り替えられる。このセットのことを構成と呼んでいる。Visual Studioと同じく、開発向けの最適化がほとんどされないDebugと、最適化が適用されるリリース用のReleaseの2つの構成がデフォルトで用意される。

スタブ(stub)

もともとは切り株のこと。実際のモジュールが存在しないときに、その代用となる仮のモジュールをスタブという。Cross Development SDKの中にある共有ライブラリは、一見実物と同じように見えるが、関数のシンボルなどリンクに必要な情報があるだけで、実体のコードが入っていない、リンクを推敲するためだけの代用品であるため、スタブと呼ばれている。


関連キーワード

Mac | Mac OS X | SDK | x86 | Apple


       1|2|3|4 次のページへ

Copyright© 2016 ITmedia, Inc. All Rights Reserved.

Loading

ピックアップコンテンツ

- PR -

注目のテーマ