2010/08/25

Boost を クロスコンパイルするよ

というわけで、クロスコンパイルの方法を。
環境はLinux(Ubuntu + ターゲットの開発環境)

流れは

  1. ダウンロードと展開
  2. bjamの作成
  3. user-config.jam の書き換え
  4. bjamの実行

です。

ダウンロード

ダウンロードは、boost.org から持ってきます。
今回は、とある事情から1.43.0を使いますが、たぶんどれでも大丈夫(だとおもう)

ダウンロードしたら、展開してください

  • tar zxvf boost_1_43_0.tar.gz

とかでいいと思います。

bjamの作成

展開できたフォルダに移動して、bootstrap.sh を実行します。
作業場所では、いつも話題に上がりますが、
boostrap ではなく bootstrapですw

  • cd boost_1_43_0
  • ./bootstrap.sh

といった感じ。

user-config.jam の書き換え

今回は、クロスコンパイル用の g++ を使うので、そういう感じに書き換えます。
まず、user-config.jam の場所ですが、

<展開したboost>/tools・build/v2/user-config.jam

です。

適当なテキストエディタでファイルを開いて、編集準備を。
といっても、書き方がいろいろ書いてあるので、それに沿って書いていきます。

書式は

  • using msvc : [version] : [c++-compile-command] : [compiler options] ;

今回は、g++ を差し替えるだけなので、gcc のデフォルト設定を上書きする感じ?

  • gcc : 4.2 : <クロスコンパイル環境のパス>g++ ;

こんな記述を追記します。
そのほかにも、いろんな環境の設定が書いてあるので、眺めるのもいいと思います。

ビルドツールのマニュアルは、ここ(Boost.Build V2 User Manual)
クロスコンパイルの設定は、このあたり

bjamの実行

最後に、bjamを実行して、モジュールを作りましょう。
今回は、組み込み環境に突っ込むので、staticライブラリにします。

bjamの設定は、

  • ./bjam –help

とかで確認できます。

今回は、インストールする場所を、ターゲット環境元のファイルがあるところへ

  • sudo ./bjam --prefix="<ターゲット環境>/usr/local" --without-python --without-mpi link=static runtime-link=static threading=multi install

解説ですが、

sudoはインストール先のアクセス権が無いから。
--prefix="<path>" でインストール先を指定
--without-python は、pythonを動かす予定がないのと、ターゲットにもpythonいれないし・・・
--without-mpi は指定しなくても勝手に外れますが、メッセージが気になるので。
link=static でスタティックライブラリ
runtime-link=static でC、C++関連のライブラリもスタティックリンクします
threading=multi でマルチスレッド対応に。
install をつけて、出来あがったバイナリをインストールします。

まとめ

と、これで、出来あがったデータを使って、実行ファイルまで作成できることを
確認しましたが、実機上で動くかは、明日にでも確認できるかなぁ。

自分がよくわかってないことで、ar(アーカイバ?)って、クロスコンパイルのときも
Linuxのgccのやつをそのまま使ったりしてたりするけど、
クロスコンパイルの方のツールにも、専用っぽいやつがあるんだよね。
仕組みとして、ライブラリに変換するだけで、ライブラリのフォーマットは、
Linuxなら同じだから大丈夫とか、そういう理屈なんだろうか。気持ち悪い

動かなかったらまたいろいろ疑わないといけないなぁ

0 件のコメント:

コメントを投稿