現在のOpenCVは正式な環境では armv7s 対応のライブラリを作ってくれません。
そのため、アプリをビルドする場合にはプロジェクトから armv7s を外さなければなりません。
これからアプリを出そうという際には最新のアーキティクチャを使えないのはとうも納得が行きません。
そこでいろいろ調べてみました。
私はcmakeに関しては全くの素人で、これから知識を深めたいというわけでもありませんので、「とりあえずビルドできる」を目標にしています。
結論から言うと
opencv/ios/cmake/Toolchains/Toolchain-iPhoneOS_Xcode.cmake を編集してやります。
essage (STATUS “Setting up iPhoneOS toolchain”)
set (IPHONEOS TRUE)# Standard settings
set (CMAKE_SYSTEM_NAME iOS)
# Include extra modules for the iOS platform files
set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} “${CMAKE_CURRENT_SOURCE_DIR}/ios/cmake/Modules”)# Force the compilers to gcc for iOS
include (CMakeForceCompiler)
CMAKE_FORCE_C_COMPILER (gcc gcc)
CMAKE_FORCE_CXX_COMPILER (g++ g++)set (CMAKE_C_SIZEOF_DATA_PTR 4)
set (CMAKE_C_HAS_ISYSROOT 1)
set (CMAKE_C_COMPILER_ABI ELF)
set (CMAKE_CXX_SIZEOF_DATA_PTR 4)
set (CMAKE_CXX_HAS_ISYSROOT 1)
set (CMAKE_CXX_COMPILER_ABI ELF)SET (CMAKE_OSX_ARCHITECTURES “armv7” “armv7s”)
# Skip the platform compiler checks for cross compiling
set (CMAKE_CXX_COMPILER_WORKS TRUE)
set (CMAKE_C_COMPILER_WORKS TRUE)
赤で色分けされた行を追加してやるだけです。
とりあえずテストプロジェクトでは iPhone 5用にビルドしても問題なく armv7s でコンパイルされており、リンカーでもエラーは出ません。
ただもう一つ問題が…
結論から言うと、armv7でもarmv7sでもパフォーマンスはあまり変わりませんでした(処理にも依存すると思うのですが)。
で、OpenCVをビルドした時のログを見てみると全くオプティマイズされていないようなのです。
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xct oolchain/usr/bin/clang -x c -arch armv7s -fmessage-length=0 -Wno-trigraphs -fpascal-strings -O0 -Wno-missing-field-initializers -Wno-missing-prototy pes -Wno-return-type -Wformat -Wno-missing-braces -Wparentheses -Wswitch – Wno-unused-function
これは多分armv7でビルドした際も同じだと思います。OpenCVのソース内までデバッガーで追って行くつもりは無いのでやはり “-Os” でコンパイルしたいです。
またOpenCVのcmakeと格闘です。
今回の事で少しだけcmakeも理解(?)出来た気もしますので時間のある時に試してみます。
Leave a Reply