検索
連載

第13回 Universal Binary【後編】Undocumented Mac OS X(3/4 ページ)

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

PC用表示 関連情報
Share
Tweet
LINE
Hatena

2つ以上のアーキテクチャ

 Mach-Oでは、CPUの種別はcputypeとsubtypeという2つの数値で区別される。cputypeはPowerPCなど相互に互換性のないレベルでの区別を示し、subtypeはPowerPCならG3(ppc750)やG4(ppc7400、ppc7450)など互換性があるが最適化が異なったり有効な命令セットが若干異なるCPUを区別したりする場合に利用される。

 「-arch ppc」はPowerPC一般を意味するが、「-arch ppc750」と指定することでGCCはG3に特化した最適化を許された状態でビルド*を行う。例えば「-arch ppc750 -arch ppc7400 -arch ppc970」と指定すればG3、G4、G5(32ビット)に対応したコードが生成され、「-arch ppc -arch ppc64 -arch i386」とすれば32ビットモードのPowerPC、64ビットモードのPowerPC、x86のコードで構成されたUniversal Binaryが構築される。

 また、確認した限りでは表1にあるアーキテクチャが指定可能だった。

表1
表1 「-arch」オプションで指定できるアーキテクチャ名一覧。cputype、subtypeについては/usr/include/mach/machine.h参照

Universal Binaryの確認

 実行ファイルがUniversal Binaryかそうでないかを確認する最も簡単な方法は、fileコマンドを実行し調べてみることだ。Mac OS Xのfileコマンドは、Mach-

OヘッダやFATヘッダを調査してどういったCPU向けのコードが含まれているのかをすべて表示する(実行例5)

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

実行例5 fileコマンドを利用し、その実行ファイルにどのようなアーキテクチャが含まれているか調べられる

 GUIから確認するなら、Finderの「情報を見る」で表示される情報パネルの「一般情報」を見てみるとよい。1種類のCPUのアーキテクチャにしか対応していない場合はそのアーキテクチャ名を、複数に対応している場合は「(Universal)」と表示される(図4、5)

右:図5 Universal Binaryの場合、Finderの「情報を見る」の一般情報ではこのように「(Universal)」と表示される

 もっと詳しい情報が必要な場合はotoolコマンド*を使う。「-f」オプションを使うことで、fat-arch構造体の内容を表示する(実行例6)

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

実行例6 otoolは、Mach-O形式のオブジェクトファイルに関する各種情報を取得するコマンドだ。「-f」オプションを用いることで、FATヘッダとfat_arch構造体の内容をすべて知ることができる

 Machヘッダの確認には「-h」オプションを使用する。Universal Binaryに対して「-h」を単独で使用すると、そのマシンで実際に実行するときに選択するであろうアーキテクチャのMachヘッダの内容を表示する。ほかのアーキテクチャのMachヘッダの内容を表示させたい場合は「-h」に加えて「-arch」でCPUの種別を指定するとよい(実行例7)

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

実行例7 「-h」オプションを用いるとMachヘッダの内容が出力される。Universal Binaryに対して「-h」で出力を行うと、通常は実行時に選択されるアーキテクチャのMachヘッダの内容が表示される。特定のアーキテクチャのMachヘッダを出力したい場合は、「-arch」オプションを併用する

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

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

特化した最適化を許された状態でビルド

許されたからといって、使われているとは限らないことに注意。実際のところ、「-arch ppc」と「-arch ppc750」の間で有意な性能差が出るとは考えがたい。

otoolコマンド

otoolは32ビットバイナリ専用で、64ビットのMachヘッダを確認する場合は、otool64を使用する。


関連キーワード

Mac | Mac OS X | SDK | x86 | Apple


Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る