ホーム > GIS/RS, linux > OrfeoToolBox3.8.0をArchLinux & GCC4.6.0でビルド→結局、GCC4.3.4を使った

OrfeoToolBox3.8.0をArchLinux & GCC4.6.0でビルド→結局、GCC4.3.4を使った

GRASSよりも高度な画像処理が実装されているOrfeoToolbox(以下、OTB)をインストールしようと思ったら、それを構成するInsight ToolkitがGCC4.6.0に対応していないことが原因でビルドがうまくいかない。それじゃInsight Toolkit (以下、ITK)のビルドからやり直してみようってことで以下、手順の覚え書き。

Insight ToolkitをAURからインストール

※だたし、この手順は後ほど誤りであることに気付く。参考にしてインストールする方は注意してください。

ここからTarballをダウンロード、展開してmakepkgする。cmakeが必要だが、下記の実行で自動にインストールされる。

wget https://aur.archlinux.org/packages/insight-toolkit/insight-toolkit.tar.gz
tar xaf insight-toolkit.tar.gz
cd insight-toolkit
makepkg -s
#しばらく待つ
sudo pacman -U insight-toolkit-3.20.0-2-x86_64.pkg.tar.xz

OrfeoToolboxをビルド

OTBに必要なパッケージをインストールした後、OrfeoToolboxのソースをダウンロードして展開、cmake→make。OTB_USE_EXTERNAL_ITK=ONにするのがポイント。

sudo pacman -Sy fltk gdal mesa openthreads freeglut
wget http://jaist.dl.sourceforge.net/project/orfeo-toolbox/orfeo-toolbox/OTB-3.8/OrfeoToolbox-3.8.0.tgz
tar xaf OrfeoToolbox-3.8.0.tgz
mkdir OTB-Binary
ccmake ../OrfeoToolbox-3.8.0 -DOTB_USE_EXTERNAL_ITK=ON #その他のオプションも適宜設定する。
# 1-2分待つ
make
sudo make install

その後の奮闘

ウマーで終わると思ったら今度はCode/IO/CMakeFiles/OTBIO.dir/otbGDALImageIO.cxxに問題があってコンパイルが止まる。なんなんだよもう。というわけで、ソースコードを探ってみた。

原因はビルドしたITKのitkImageIOBase.hにはIOComponentType::CFLOAT、IOComponentType::CDOUBLE(複素数のデータ型と思われる)がなぜか入っていなくて、これを参照しようとして止まってしまったらしい。otbGDALImageIO.cxxのうち、該当する部分をコメントアウトするとコンパイルが通った。複素数型なんて滅多に使わないし、ま、いいでしょ。

しかし、それでもなおうまくいかない。次のエラーはitkPixelBuilder.hが無いよというエラー。ITKのソースディレクトリをくまなく探してもそんなファイルは見つからない。実は、OTBで使っているITKのパッケージはかなり昔のバージョンなのだ。最新版は2010年6月にリリースされた3.20であるのに対し、OTBで使っているのは2003年にリリースされた1.2.0。メジャー番号が2も違えばファイル構成も変わりますわな。

よしそれじゃ1.2.0をビルドしちゃうぞーって張り切ったら、またエラーで止まってしまう。そもそも、これが原因で一筋縄ではビルドができなかったのだ。つまり、やっとのことでスタート地点に着いたわけだ。なお、この辺の問題はなかのひとも取り組んでいるようで、新しいITKに対応するためのプロジェクトのページがこちら

試行錯誤の末、試したのがGCC4.3.4をAURでビルドして、そのコンパイラを使ってOrfen Toolbox(というよりITK1.2.0)をコンパイルするという手順。DebianのGCC4.3.2のコンパイルが通ったので、4.3.4ならいけるんじゃないかという期待。

そうした試行錯誤を重ねた結果、下記の手順でやっとのことビルドできた。いちばんやっかいなのは、GCC4.6.0でコンパイルされたであろう公式パッケージ版のproj、geos、Openthreadsを入れていたら、OTBのコンパイルの際にglibcの参照にエラーが生じたこと。詳しくはわからんが、都合悪くバイナリの互換性が通らなかったのだろう。

  1. AURのGCC4.3.4をmakepkgでコンパイル、pacmanでインストール
  2. geosproj, Openthreadsをmakepkgでコンパイル。この際、PKGBUILDのconfigureの前に下記を追記しておく。また、projのパッケージに含まれる投影まわりのファイル名が合っていないので適宜修正する
  3. export CC=/opt/gcc-4.3/gcc
    export CXX=/opt/gcc-4.3/gcc
    
  4. OTB3.8.0のコンパイル、インストール。コンパイラの設定に注意。cmakeの設定エディタならtを押すと拡張項目が表示される。
  5. wget http://jaist.dl.sourceforge.net/project/orfeo-toolbox/orfeo-toolbox/OTB-3.8/OrfeoToolbox-3.8.0.tgz
    tar xaf OrfeoToolbox-3.8.0.tgz
    mkdir OTB-Binary
    cmake -DCMAKE_CXX_COMPILER=/opt/gcc-4.3/g++ -DCMAKE_C_COMPILER=/opt/gcc-4.3/gcc -DOTB_USE_EXTERNAL_ITK=OFF ../OrfeoToolbox-3.8.0 #その他のオプションも適宜設定する。
    # 1-2分待つ
    make
    sudo make install
    

さて、これで心置きなく衛生画像のセグメンテーションができるようになった。ふぅ。

カテゴリー: GIS/RS, linux タグ: ,
  1. コメントはまだありません。
  1. トラックバックはまだありません。