ただし、今回は軽量版のため、i386専用。
一番注意しないといけないことは、OpenCVのソースコードは”必ず”SourceForgeのsubversionからとること!tarで圧縮されたやつには必要なファイル(configure)がおいてないので無理です。
まずは公式サイトからOpenCVのソースコードを持ってくる。
%svn co https://opencvlibrary.svn.sourceforge.net/svnroot/opencvlibrary/trunk/opencv opencv %cd opencv次にmake_frameworks.shを修正
- FRAMEWORK_INSTALL_PATHを好きなとこ(大抵は「/Library/Frameworks」)
- SYSROOTを自分のOSのバージョン(SnowLepardなら「--sysroot=/Developer/SDKs/MacOSX10.6.sdk」)
#! /bin/bash # the current directory should not be configured if test -e Makefile; then make distclean; fi # (re-)create directories rm -rf build_i386 build_x86_64 OpenCV.framework mkdir build_i386 mkdir build_x86_64 # find out how many parallel processes we want to use for make # see http://freshmeat.net/projects/kernbench/, we use a slightly different 'optimum' guess export parallel_jobs=$((2 * `sysctl -n hw.ncpu` + 1)) # this setting defines where the framework should be installed export FRAMEWORK_INSTALL_PATH="/Library/Frameworks" #export FRAMEWORK_INSTALL_PATH="/Users/your_login_name_here/Library/Frameworks" # set up a couple of additional build settings export SETTINGS="CC=gcc-4.2 CXX=g++-4.2 --without-python --without-octave --disable-apps --build=`arch`" #export SETTINGS="--without-python --without-octave --build=`arch`" export SYSROOT="--sysroot=/Developer/SDKs/MacOSX10.6.sdk" # build intel version echo "Building i386 version of the OpenCV framework" echo "=============================================" if test -d build_i386; then cd build_i386; fi ../configure --host=i386-apple-darwin9 $SETTINGS --enable-sse CPPFLAGS="$SYSROOT" CFLAGS="-arch i386" CXXFLAGS="-arch i386" LDFLAGS="$SYSROOT -arch i386"¥ && make -j $parallel_jobs framework FRAMEWORK_ARCH=i386 cd .. #### 64bitに対応させないなならここから下はいらない #### echo "Building x86_64 version of the OpenCV framework" echo "=============================================" if test -d build_x86_64; then cd build_x86_64; fi ../configure --host=x86_64-apple-darwin9 $SETTINGS --without-quicktime --without-carbon CPPFLAGS="$SYSROOT" CXXFLAGS="-arch x86_64" LDFLAGS="$SYSROOT -arch x86_64"\ && make -j $parallel_jobs framework FRAMEWORK_ARCH=x86_64 cd .. # build universal version echo "Creating universal Framework" echo "=============================================" cp -Rp build_i386/OpenCV.framework ./ lipo -create build_x86_64/OpenCV.framework/OpenCV build_i386/OpenCV.framework/OpenCV -output OpenCV.framework/Versions/B/OpenCV # finalize echo "Done!" open .
これで、i386用のフレームワーク「build_i386/OpenCV.framework」と「build_x86_64/OpenCV.framework」と両方に対応したユニバーサルバイナリの「OpenCV.framework」ができます。
別に配布用じゃないのでi386向けだけでよかったんだけど、そうするとこのフレームワークを使うプログラムをコンパイルするたびに「-arch i386」をつけてコンパイルしないとエラーがでるらしい。
ちなみに、「lipo」は別々のアーキテクチャ向けにコンパイルした実行ファイルを合体させてuniversal binaryにするコマンドらしい、ppc用やppc64用などもコンパイルして合体させることも可能。
どんなオプションつけたらフレームワークが作れるか調べて、自前のフレームワークの作り方もまとめたいな、、、
0 comments:
コメントを投稿