kkAyatakaのメモ帳。

誰かの役に立つかもしれない備忘録。

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