BoostをRaspberry Pi向けにクロスビルドする
BoostをRaspberry Pi向けにクロスビルドします。
- Boost 1.54.0
- Raspbian (Hard Float)
クロスコンパイラの準備
クロスコンパイルの環境を整えます。
参考
ARM用なら引数次第で何とでもなるやろ~と軽い気持ちでapt-getでGCCを入れたところ、どうあがいてもARM v6(Raspberry PiのCPU)向けビルドができず、さらに、よくわからずに入れたらSoft Float版で使えず(中途半端に動いたけど)といろいろあったので、おとなしく推奨されているツールを入れます。
$ cd ~/local/opt $ git clone git://github.com/raspberrypi/tools.git
Soft Float版、Hard Float版のほかに、LinaroのHard Float版も入ってる感じです。
$ ls tools/arm-bcm2708/ arm-bcm2708hardfp-linux-gnueabi arm-bcm2708-linux-gnueabi gcc-linaro-arm-linux-gnueabihf-raspbian
使うツールセットのbinに対して、パスを通しておきます。
$ export PATH=$PATH:/home/ayataka/local/opt/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/
クロスビルド
ソースコードをDL & 解凍して、booststrapを実行。
$ cd boost_1_54_0/ $ ./bootstrap.sh
このままだと単にビルドするだけなので、user-config.jamを書き換えます。適当に開いてコンパイラの設定を追記します。g++の名前は使うもので異なるので、PATHを通したものを記述します。
$ vi ./tools/build/v2/user-config.jam using gcc : arm : arm-linux-gnueabihf-g++ ;
あとはb2を用いてビルドします。インストールパスはお好みで。
$ ./b2 install -j2 --prefix=$HOME/raspi/local
おまけ
readelfでバイナリを確認できます。覚えておくと何かと便利です。
$ readelf -A libboost_atomic.so.1.54.0 Attribute Section: aeabi File Attributes Tag_CPU_name: "6" Tag_CPU_arch: v6 Tag_ARM_ISA_use: Yes Tag_THUMB_ISA_use: Thumb-1 Tag_FP_arch: VFPv2 Tag_ABI_PCS_wchar_t: 4 Tag_ABI_FP_denormal: Needed Tag_ABI_FP_exceptions: Needed Tag_ABI_FP_number_model: IEEE 754 Tag_ABI_align_needed: 8-byte Tag_ABI_align_preserved: 8-byte, except leaf SP Tag_ABI_enum_size: int Tag_ABI_HardFP_use: SP and DP Tag_ABI_VFP_args: VFP registers Tag_ABI_optimization_goals: Aggressive Speed Tag_CPU_unaligned_access: v6 Tag_DIV_use: Not allowed