ページ

2014年6月7日土曜日

Max OS X 10.9 (Mavericks)でwxWidgets

概要

目標


  • wxWidgetsのMac OS X用静的リンクライブラリを作る
  • ターゲット環境は以下の通り
    • CPUアーキテクチャ : Intel Mac (32bit/64bitユニバーサルバイナリ)
    • 最低動作OSバージョン: Mac OS X 10.7 (Lion)

ビルド環境


  • iMac 21.5-inch, Late 2009
  • Mac OS X 10.9 (Mavericks)
  • Xcode 5.1.1
  • Apple LLVM version 5.1


ダウンロードとconfigure

まずは公式サイトからwxWidgets 3.0.0のソースコードをダウンロードして(Source for Linux, OS X, etcってやつ),適当なディレクトリに展開した

ビルドには以下ページを参考にした(若干情報が古いものもある).



Xcodeを使ってビルドする方法もあるようだけど,4番目のページに
"Building wxWidgets using Xcode is generally less flexible and reliable than use the terminal."
とか書いてあるので,今回はconfigureでビルドすることにする.

configureは以下のように実行した.できれば1個の静的ライブラリにまとめられればスッキリするのだけど,--disable-sharedと--enable-monolithicは一緒に使うなと2番目のページに書いてあったので,--disable-sharedだけにしておく.

./configure --disable-shared --enable-unicode --with-osx_cocoa --enable-universal-binary=i386,x86_64 --with-macosx-version-min=10.7 --with-macosx-sdk=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk --prefix=/Users/USERNAME/Develop/wxWidgets-3.0.0

後から知ったところによると,--enable-unicodeはデフォルトになっているらしいので,ここで明示的に指定する必要はなかったかも.

なおこの設定ではC++標準ライブラリとしてlibstdc++を使うようにビルドされるので,アプリでlibc++を使いたい場合は明示的にその設定を加える必要がある.

PowerPCのMacを相手にすることは今後恐らく無いので,--enable-universal-binary=i386,x86_64にしてある(i386さえ既に不要かもしれない),
--with-macosx-version-minは最低動作OSバージョン.--with-macosx-sdkはビルドに使うSDKで,基本的には現在Xcode.appの中に入っている最新のSDKを指定すれば良いと思う.--prefixは,wxWidgetsをインストールするディレクトリを指定する.これを明示的に指定しないとたぶん/usr/local配下に入ってしまって,複数バージョンの共存やアンインストールが難しくなる.私の場合は自分のホームディレクトリにDevelopというディレクトリを作ってあるので,その配下にwxWidgets-3.0.0というディレクトリを作って(予め作っておく必要がある)インストールすることにした.

ビルド

さてconfigureが完了したのでmakeしてみると,以下のようなエラーが出る.
./src/tiff/libtiff/tif_lzma.c:38:10: fatal error: 'lzma.h' file not found
#include "lzma.h"
./src/common/imagjpeg.cpp:45:14: fatal error: 'jpeglib.h' file not found
#include "jpeglib.h"

ググってみると,似たようなトラブルに遭遇している人がいる.
https://bugs.launchpad.net/kicad/+bug/1285317

要するに,homebrewでxzとlibjpegをインストールして,インクルードパスとリンクパスを通せば良いらしい.私の場合は既に両方インストール済みだったので,

export CFLAGS="$CFLAGS -I/usr/local/Cellar/xz/5.0.5/include"
export CFLAGS="$CFLAGS -I/usr/local/Cellar/jpeg/8d/include"
export CPPFLAGS="$CFLAGS"
export CXXFLAGS="$CFLAGS"
export LDFLAGS="$LDFLAGS -L/usr/local/Cellar/xz/5.0.5/lib"
export LDFLAGS="$LDFLAGS -L/usr/local/Cellar/jpeg/8d/lib"

のように環境変数としてパスを指定して,
./configure (オプションは上記の通り)

そして
make -j 2

このmakeにはかなり時間がかかることが試行錯誤しているうちにわかっていたので,-j 2オプションをつけて並列実行したのだけど,それでも30分ぐらいかかった.私のiMacがだいぶ古いせいかもしれない.

インストール

make install

すると,アプリ開発に必要なファイルが,configureの--prefixで指定したディレクトリにコピーされる.

念のため,libディレクトリ以下の静的バイナリがちゃんとUniversalバイナリになっているか確認.
lipo -info libwx_osx_cocoau_core-3.0.a

Architectures in the fat file: libwx_osx_cocoau_core-3.0.a are: i386 x86_64

うまくいったようだ.

0 件のコメント: