lab/技術情報/openCVonFCC

compile 最終版

Opencvと研究用ライブラリをFCCコンパイルでするのに本当に必要なものは何なのか,を探るページです.

contetns

手順

openCV

事前に各種設定ファイルに手を入れる

  • openCVはGCC互換のコンパイラでコンパイルすることを前提としているようなので,FCC向けにちょこちょこいじる.
  • configureの2965行目のexitをコメントアウト
  • configureの2999行目のexitをコメントアウト
  • configureの3046行目のexitをコメントアウト
  • cv/src/cvcalibinit.cpp の70行目に
    #define PRINTF(...)
    を追加
  • cv/src/cvkdtree.cppの46行目に
    using namespace std;
    を追加
  • cvaux/include/cvvidsurv/.hppの51行目に
    #define __GNUC__
    を追加し,61行目に
    #undef __GNUC__
    を追加.
  • include/opencv/cxmisc.hの122行目に
    #define __GNUC__
    を追加し,137行目に
    #undef __GNUC__
    を追加.
  • cv/src/cvcalibinit.cpp の70行目に
    #define PRINTF(...)
    を追加
  • cv/src/cvkdtree.cppの46行目に
    using namespace std;
    を追加
  • cvaux/include/cvvidsurv/.hppの51行目に
    #define __GNUC__
    を追加し,61行目に
    #undef __GNUC__
    を追加.
  • opencv/configure.inの19856行目,DEF_CXXFLAGSという箇所をコメントアウト.これで-O3,-fomit-frame-pointerオプションが入らなくなる.
  • include/opencv/cxmisc.hのかきかえ:
    • 121行目あたりで,ALLOCAについての設定がある.デフォルトだとここの条件分岐で#errorもしくは #define alloca __builtin_allocaに設定されてしまうのだが,これではまずい.
    • FCCに渡すコンパイラオプションに -Dalloca=C_alloca を指定しているのでこれが反映されるようにする.
    • てなわけで,やり方はいろいろあるのだが,私はこうしました:
      @122行目 #define __GNU_C__
      @124行目 // #undef alloca  //コメントアウト
      @125行目 // #define __builtin_alloca //コメントアウト
      @137行目 #undef ___GNU_C__

コンパイル開始

setenv CXX FCC
setenv CXXFLAGS "-frtti --variadic_macros --alternative_tokens  -DUSE_C_ALLOCA -Dalloca=C_alloca -Kparallel,reduction,OMP
../configure  --disable-apps --enable-static --disable-shared  --without-python --prefix=/home/t/tXXXXX/opencv-1.1.0.FCC.Kparallel
 
make 
make install

自前ライブラリ

makefileの修正

  • 続いて自前のライブラリを使用したプログラム.まずはmakefileにgtkとgtherad関係のライブラリを追記:
    INC += `pkg-config --cflags opencv gtk+-2.0 gdk-pixbuf-2.0`
    LIB +=  -ltiff -lpng -ljpeg  `pkg-config --libs opencv gtk+-2.0 gdk-pixbuf-2.0` -lgthread-2.0
    • 注意:これらのライブラリはopencv関係のライブラリよりも先にリンカに呼び出されなければならない.そこでMakefileにはopencv->gtk->gthreadの順で記載する.ライブラリは後ろから順に呼び出されるようである.
  • さらに
    CFLAGS = --variadic_macros --alternative_tokens  -DUSE_C_ALLOCA -Dalloca=C_alloca  -Kparallel,reduction,OMP
    をコンパイラオプションとして追加.
  • "-frtti"
    • コンパイル時「-frtti」が必要(?)
    • リンク時は「-frtti」不要
      $(OBJNAME):${OBJNAME}.o 
              $(CC)  $(CFLAGS) -o $@ $@.o  $(KINC) $(LIBS)
              cp $@ $(KBINDIR)$@
      
      .cpp.o:
              $(CC) -c -frtti $(CFLAGS) -o $@ $< $(KINC)

コンパイル

make # => 勝ち!

いやー,1ヶ月近く,格闘した甲斐がありますた・・・&cry;

comment

#comment_kcaptcha


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-10-10 (金) 04:15:00 (5698d)