自分でビルドしたiOSバイナリからUniversal Static Libraryを作成します。
Introduction
Universal Static Libraryというのは複数のアーキテクチャのバイナリが一つに結合されたバイナリです。
つまり、arm7、arm7s、arm64などを一つのバイナリとして扱うことが可能です。
これによって、アーキテクチャに応じてバイナリのリンクを変更しなくて済むというメリットがあります。
しかし、当然バイナリサイズが膨れ上がるので、サポートするつもりのないアーキテクチャのバイナリは除外するか、そもそも個々のバイナリを小さくする工夫が必要です。
OpenCVは後者のサイズを小さくする工夫が可能です。
ビルドオプションで必要なコンポーネントだけを指定することができます。
工夫の方法は割愛して、単純に作成したlibopencv_merged.aを、Universal Static Libraryとして結合してみます。
掲題の通りなんですが、情報が少ないんですよ。
How to do?
OpenCVのiOSビルドを行うと、下記のアーキテクチャのバイナリが生成されます。
- armv7
- armv7s
- arm64
- i386
- x86_64
最後の2つはsimulator用ですが。
また、出力先の /lib/Releaseにはlibopencv_merged.aが存在します。
libopencv_world.aとは違い、他の静的ライブラリ(libpng.aとか)を結合しているように見えます。
これを結合してみます。
1 | xcrun -sdk iphoneos lipo -create ./build-armv7-iphoneos/lib/Release/libopencv_merged.a \ |
一つのlibopencv_merged.aが生成され、fileコマンドで確認すると全部のアーキテクチャが一つになっていることがわかります。