ICU を BeagleBoard-xM の Linux で使う (1) 準備編

Facebooktwittergoogle_plustumblrmail
普通は、 ICU をダウンロードしてきたらこんな感じで runConfigure 、 make 、 make install 一発なのですが…
$ cd icu/source
$ ./runConfigureICU Linux
$ make
$ sudo make install

クロスコンパイルする時にはそうは行かないようです。
ドキュメントを読むと、通常 ICU の Make 過程では、途中で ${build_dir}/bin へツールを生成するが、それらは最終的に ICU のパッケージを作る段階でも必要なものであるとの事。
クロスコンパイルの場合、クロスコンパイルで ${build_cross_dir}/bin へ生成されるツールは正にターゲット環境向けのバイナリであり、ビルド時の環境では (一般的には) 利用不可能。その結果、クロスコンパイルの最終段階で ICU のパッケージを作る事ができなくなると書いてあります。
以上から、こんな方針でクロスコンパイルを進めると良いそうです。
  • クロスコンパイルする為に一度ビルド時の環境ネイティブな ICU を構築する (仮に BuildA とする) 。
  • その後改めてターゲット環境用の ICU をクロスコンパイルする (同 BuildB) 。
  • クロスコンパイルする時は、 BuildB のクロスコンパイル中に ${BuildA_dir}/bin を参照させる為、クロス環境用の configure へオプション –with-cross-build=${BuildA_dir} (${BuildA_dir はフルパス) を設定する。
その他、 ICU の configure は –host では (Ubuntu での ARM クロス開発環境標準パッケージ名である) arm-linux-gnueabi を認識せず、 –host=arm-linux とするしかありません (頑張って configure を改造すれば話は別ですが (→別記事でやってる) 、見た感じ今回は面倒そうだったので止めました) 。従って、クロスコンパイル用のツールは環境変数 AR、CC、CPP、CXX、RUNLIB、LD へ直接指定しました。
$ cd /home/yusuke/work
$ tar xvf icu-xxxxx.tgz
$ mkdir -p buildA buildB buildB/OUT
$ cd buildA
$ ../icu/source/runConfigureICU Linux
$ make
$ cd ../buildB

configure ですが、やり方は以下 2 通りのどちらでも OK 。いつもこれは何気なしに使っていたのですが、今回この理由をはっきりさせたかった (…まあそういう時間があったという事です) ので、別記事にまとめました (→make と環境変数) 。
まずは先に環境変数を作っておく方法 :
$ export AR=arm-linux-gnueabi-ar
$ export CC=arm-linux-gnueabi-gcc
$ export CPP=arm-linux-gnueabi-cpp
$ export CXX=arm-linux-gnueabi-g++
$ export RUNLIB=arm-linux-gnueabi-runlib
$ export LD=arm-linux-gnueabi-ld
$ ../icu/source//configure --host=arm-linux
--with-cross-build=/home/yusuke/work/buildA
--prefix=/home/yusuke/work/buildB/OUT

または、環境変数をコマンドラインで一気に渡してしまう方法 :
$ env AR=arm-linux-gnueabi-ar 
CC=arm-linux-gnueabi-gcc
CPP=arm-linux-gnueabi-cpp
CXX=arm-linux-gnueabi-g++
RUNLIB=arm-linux-gnueabi-runlib
LD=arm-linux-gnueabi-ld
../icu/source/configure --host=arm-linux
--with-cross-build=/home/yusuke/work/buildA
--prefix=/home/yusuke/work/buildB/OUT

そのあとは、 buildB で make ; make install すれば OK です。今回クロス側の –prefix で buildB の直下を指定してあるので、 make install の時に root になる必要は無く、また make install の結果はそこに出力されます。
$ make
$ make install
$ cd OUT

この OUT の中身をうまく実機へコピー (/system/lib/libicuuc.so とか) すれば OK 。
(…かきかけ)

References
  • http://icu-project.org/
  • http://demo.icu-project.org/icu-bin/convexp
  • ICU のアーカイブに同梱されている readme.html
  • http://acassis.wordpress.com/2009/12/09/crosscompiling-libicu-4-2/
  • http://www.yuan.se/?p=3











Facebooktwittergoogle_plustumblrmail
Yusuke Dada K.
Yusuke Dada K.
台湾の現地企業で主に組み込みソフトウエアの研究開発をしている日本人です。我人是個日本人,負責軟體的研究開發。在臺灣的科技公司工作。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です