Tag Archives: lipo

armv7sやarm64に対応したOpenCVライブラリ

0
Filed under iOS SDK, オープンソースライブラリ
Tagged as , , ,

iOS向けのOpenCVライブラリはビルド済みのものが公開されているのでこれを取得するのが現状ベストチョイスです。
(って、私は気づかなくて、数時間掛けてビルドして、しかも、古いバージョンであったり、対応CPUアーキテクチャが少なかったりしたものだったりして、1,2日を潰してしまいましたが…、そんなミスは私だけで十分です!orz..)

公開URLはこちら

iOS向けライブラリは、opencv-iosの中にあるのですが、今日現在では、2.4.8が最新バージョンで、直接ダウンロードできるリンクはこちらになります。

対応CPUアーキテクチャの確認

また、このライブラリの中身を調べてみましたが、armv7sやarm64にも対応していました
ちなみに、確認するコマンドはこちら。

1
2
$ lipo -info opencv2.framework/Versions/A/opencv2
Architectures in the fat file: opencv2 are: arm64 armv7 armv7s i386 x86_64

以前、学んだコマンドがここで役立ってきました!
「lipo:複数アーキテクチャ向けライブラリを結合するコマンド « TORQUES LABS」


lipo:複数アーキテクチャ向けライブラリを結合するコマンド

1
Filed under iPhoneアプリ, トラブルシューティング, プログラミング言語, 仕事ツール
Tagged as , , , , ,

Odd merge signphoto © 2008 Jason McHuff | more info (via: Wylio)

iOS Static Libraries

iOS Static LibrariesというiOSアプリ向けにビルドされた便利ライブラリ群があります。
ちょっと必要なライブラリが含まれていて、自分でビルドするよりも便利ですし、iOS SDKがバージョンアップされたらきちんと更新されているので便利に使わせてもらっています。
先日、iOS Static Librariesの、iOS SDK 4.3向けのビルドがリリースされました。
しかし、これがちょっと曲者で、現在iOSデバイスはARM V6かARM V7の二つがあり、今回のビルドバーションは、ARMアーキテクチャ向けに二つのビルドがなされているのです。
ARM V6というのはiPhone 3G以前で使われていたものなので、対応機種を3GS以降に絞るならARM V7のみに対応したビルドを行えばいいのですが、まだ3Gも無視できない状況ですので、これをなんとかしないといけません。
そして、Xcodeのビルド設定的には一つにマージされている方が便利なのです。
マージって、、なんかツールがあるのか?設定でどうにか回避できるものなのか?と調べてみたところ、偶然、lipoというコマンドを知ることが出来ました。

lipoコマンド

man lipoによると、次のような説明があります。

The lipo command creates or operates on “universal” (multi-architecture) files.

まさに複数アーキテクチャ対応のユニバーサルファイルを生成するためのツールだと分かります。
そして、これはiOSアプリを開発できる環境ならインストール済みであることも分かりました。
例として、前述したiOS Static Librariesについて調べてみます。
ARM V6用のライブラリ libcurl.a について下記のコマンドで調べてみます。すると、ちゃんとターゲットアーキテクチャを調べることが出来ることが分かります。

1
2
3
$ lipo -info libcurl.a
input file libcurl.a is not a fat file
Non-fat file: libcurl.a is architecture: armv6

そして、ユニバーサルファイルを作る例ですが、例えば、ARM V6用、V7用のlibcurl.aが、./armv6/libcurl.a と、 ./armv7/libcurl.a にある場合には、次のようにして生成できます。出力先は ./fat/ とします。

1
lipo -arch armv6 ./armv6/libcurl.a -arch armv7 ./armv7/libcurl.a -create -output ./fat/libcurl.a

直感的でわかりやすいですね!

armv6/armv7ユニバーサルライブラリをつくる

というわけで、今回の目標である「iOS Static Librariesのarmv6/armv7ユニバーサルライブラリをつくる」シェルスクリプトを載せておきます。
まず、準備として次のようなファイル配置にしておきます。

workディレクトリ直下で実行したら、work/lib以下にユニバーサルライブラリファイルが生成されると思います。また、処理対象は”*.a”ファイルのみ、とします。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/bash
 
echo 'makefat.sh -- start!'
 
RootV6='./iPhoneOS-V6-4.3'
 
for lib_armv6 in `find $RootV6 -name "*.a" -print`
do
	lib_armv7=`echo $lib_armv6 | sed "s/V6/V7/g"`
	echo $lib_armv6
	echo $lib_armv7
	lib_fat=`echo $lib_armv6 | sed "s/iPhoneOS-V6-4.3\///g"`
	echo $lib_fat
 
	lipo -arch armv6 $lib_armv6 -arch armv7 $lib_armv7 -create -output $lib_fat
done
 
echo 'makefat.sh -- end!'

one more lipo

lipoは複数アーキテクチャのユニバーサルライブラリをから特定のアーキテクチャパートを削除することも出来たりするようです。
両方対応版のライブラリのみが提供されている環境で、不要なアーキテクチャを削除すれば、ビルド後の実行ファイルサイズが小さくなったりすると思うので、そういう用途にも使えそうですね。


[AD]

↓リンカーとかプログラムをきっちりやろうとしたら外せない部分。去年出たらしいこの本、面白そうですね。

リンカ・ローダ実践開発テクニック―実行ファイルを作成するために必須の技術 (COMPUTER TECHNOLOGY)

著者/訳者:坂井 弘亮

出版社:CQ出版( 2010-08-01 )

定価:

Amazon価格:¥ 3,024

単行本 ( 303 ページ )

ISBN-10 : 4789838072

ISBN-13 : 9784789838078


↓もうすぐ発売されるWEB+DB PRESS plusシリーズ。気になるタイトルです!!

良いコードを書く技術 -読みやすく保守しやすいプログラミング作法 (WEB+DB PRESS plus)

著者/訳者:縣 俊貴

出版社:技術評論社( 2011-04-09 )

定価:

Amazon価格:¥ 2,462

単行本(ソフトカバー) ( 240 ページ )

ISBN-10 : 4774145963

ISBN-13 : 9784774145969


↓こういうのじっくり読んでみたいなぁ〜。

プログラミングコンテストチャレンジブック

著者/訳者:秋葉 拓哉 岩田 陽一 北川 宜稔

出版社:毎日コミュニケーションズ( 2010-09-11 )

定価:

単行本(ソフトカバー) ( 316 ページ )

ISBN-10 : 4839931992

ISBN-13 : 9784839931995


↓結局まだ読んでいない数学ガールシリーズ最新作はアルゴリズムへ突入!

数学ガール/乱択アルゴリズム (数学ガールシリーズ 4)

著者/訳者:結城 浩

出版社:SBクリエイティブ( 2011-02-26 )

定価:

Amazon価格:¥ 2,052

単行本 ( 480 ページ )

ISBN-10 : 479736100X

ISBN-13 : 9784797361001