Qt 4.5(Mac OS X) で 64ビットプログラムを作る方法

 Qt 4.5 からMac OS X の64ビット(x86_64)アーキテクチャと、Cocoa がサポートされるようになりました。
 Mac OS X はOSの機能を、Cocoa という Objective-Cフレームワークで提供しています。直接 Mac OS X の機能を呼ぶならば、Objective-C/C++ から Cocoa を呼ぶ必要があります。C/C++から Cocoa を呼ぶことができないため、C/C++用には Carbon というフレームワークも存在します。しかし、Carbon は将来廃止されることが決定しているため64ビット版がサポートされないことが決定しており(修正)、Mac OS X 向けにC/C++で実装したプログラムは将来を見越して、Carbon からCocoa へ移行する必要がありました。しかし、Qt 4.5からライブラリのバックエンドで Cocoa をサポートしています。つまり、Qt 4.5を使えば Cocoa を意識することなく Mac OS X ネイティブなプログラムを開発できるというわけです*1。これは非常に嬉しいですね。
 というわけで、Qt 4.5向けにx86_64向けの実行ファイルを作る方法について説明します。ちなみに、64ビットで作成したプログラムは自動的に Cocoa になるみたいですね。そして、Cocoaは 64ビットだけでなく 32ビットプログラムから使用することもできます。

手順

 既にプロジェクトファイルは作成済みとした上で、話を進めます。プロジェクトファイルを編集して、CONFIGにx86_64を追加します。

CONFIG += x86_64

 qmake コマンドで Makefileを生成します。お好みで -platform macx-g++42 なども加えます(そうすると、生成される Makefile ではCC=gcc-4.2, CXX=g++-4.2がセットされる)。

$ qmake qttest1.pro -spec macx-g++

 あとは make clean して、リビルドするだけ!

 という簡単なプロセスのはずなのですが、実は罠があります。オフィシャルで配布されている Qt 4.5 のバイナリパッケージでは x86_64/Cocoa に対応していないみたいで、コンパイル or リンクで失敗するのです*2。まず先に結論をかくと、Qtをソースコードからインストールしましょう。それで解決です。ソースコードからインストールする方法については次の段落を飛ばして、次の項で説明します。
 細かい話、どうしてそんなことがわかったのか、という経緯について書いてみます。Qt 4.5がリリースされたため、私は嬉々として Qt 4.5 のバイナリパッケージをインストールしました。次のドキュメントを読んだり、Googleで検索し文献を漁った結果、「CONFIG += x86_64」をプロジェクトファイルに追加するという答えにたどりつきました。しかし、コンパイルに失敗してしまいます。
 http://doc.trolltech.com/4.5/developing-on-mac.html
 Qtのライブラリが x86_64/Cocoa に対応している場合、コンパイル時にプリプロセッサで QT_MAC_USE_COCOA が定義されます。バイナリパッケージでは、プロジェクトファイルに「CONFIG += x86_64」を追加するだけではコンパイルに失敗してしまいました。そこで、私はコンパイル時に QT_MAC_USE_COCOA が定義されるようにプロジェクトファイルを編集し、コンパイルが成功するようにしましたが、結果的にはリンクエラーが出て失敗してしまいました。ドキュメントをよく読むと、「Cocoa 向けに Qt をビルドしていたら、QT_MAC_USE_COCOAが定義される」ということらしいです。つまり、せっかくオフィシャルサイトからダウンロードしたのにパッケージには QT_MAC_USE_COCOA が定義されておらず、Cocoa が非対応だったのです。残念!

Qt 4.5をソースからインストールする

 基本的には次のような流れで Qt 4.5 をインストールします。configure はオプションが多いため、configure --help の表示を読み、自分に必要なオプションを選んでください。インストール先はデフォルトで、「/usr/local/Trolltech/Qt-4.5.0/」です。

$ wget ftp://ftp.qtsoftware.com/qt/source/qt-mac-opensource-src-4.5.0.tar.bz2
$ tar -xvf qt-mac-opensource-src-4.5.0.tar.bz2
$ cd qt-mac-opensource-src-4.5.0
$ ./configure -optimized-qmake -fast  -shared
-debug-and-release -largefile  -silent -cocoa -framework -arch "x86 x86_64"
$ make
$ sudo make install

 私が有効にしたオプションは次のような感じです。

 あと、私はコンパイルgcc 4.2を使いたかったので、「./configure」の前に「CC="gcc-4.2" CXX="g++-4.2"」を付けて、gcc,g++を指定しました。

 PATH を通すのも忘れないようにしましょう。以上で、インストールは終わりになります。お疲れ様でした。
 Qt Creator, Qt Desinger など便利なツールも増えており、色々紹介したいところですが気が向いたら次回に続きます。それでは、Qtで快適な開発ライフを!

公式ドキュメントへのリンク

 Qt 4.5とMac OS X については、とりあえず次のドキュメントをおさえておけばよさそうです。
 http://doc.trolltech.com/4.5/qtcocoa-known-issues.html
  Cocoa でリンクするときは、スタティックリンクが非推奨のようです。

 http://doc.trolltech.com/4.5/deployment-mac.html
 http://doc.trolltech.com/4.5/developing-on-mac.html
 http://doc.trolltech.com/4.5/platform-notes-mac.html

*1:もちろん、パフォーマンスなどを意識し、直接 CocoaAPI を呼び出しすというのもありでしょう。

*2:私はは「Qt SDK: Complete Development Environmen」のMac OS X 用のパッケージをインストールしました。「Qt: Framework Only」のパッケージはインストールしていないので確認していません。

*3:どうやら、SSEのチェック等もやってくれるみたいです