2008年10月25日にCVSから入手したOpenCVのソースをビルドする(勝利)

入手したソースは OpenCV 1.1 に相当する.

開発環境

OS Windows XP Pro SP3
IDE Visual C++ 2008 Express Edition (64ビットサポートは外した)
Windows SDK Web インストーラ版または ISOイメージ版を入手して導入
DirectX SDK DirectX SDK - March 2008(実のところは不要かもしれない)
OpenCV OpenCV_1.1pre1a.exe
OpenCV CVS TortoiseCVSを使って最新のOpenCVを入手する - BiBoLoG参照
Windows SDK 導入メモ

導入後,c:\ 直下にゴミファイルが残っていた.ひとまず削除して,問題があったら戻す.c:\data\wsdktrash.lzh に固めておいた.問題がないようなので消した.

eula.1028.txt
eula.1031.txt
eula.1033.txt
eula.1036.txt
eula.1040.txt
eula.1041.txt
eula.1042.txt
eula.2052.txt
eula.3082.txt
globdata.ini
install.exe
install.ini
install.res.1028.dll
install.res.1031.dll
install.res.1033.dll
install.res.1036.dll
install.res.1040.dll
install.res.1041.dll
install.res.1042.dll
install.res.2052.dll
install.res.3082.dll
vcredist.bmp
VC_RED.cab
VC_RED.MSI

導入後の作業

パスを登録する.

  • インクルードファイル
  • ライブラリファイル

Windows 環境変数 PATH に c:\lib\OpenCV\bin を追加しておく.

プロジェクトの設定

_make\opencv.vs2005.slnをVS2008形式に変換して開く.cv および cxcore プロジェクトを選択し,プロパティページを開く.Debug,Release 両構成について編集する.

  • 構成プロパティ>C/C++>言語を開き,OpenMPサポートを「はい(/openmp)」とする
  • 構成プロパティ>リンカ>入力を開き,追加の依存ファイルを登録する.vcomp.lib を追加する.

「すべての構成」で編集していると,cv プロジェクトで必要な cxcored.lib,cxcore.lib の依存記述を消してしまうから,面倒でも Debug,Release 各構成で編集するという2度手間を取る.

ソースファイルの調整

cvcompat.h 757行目を手で打ち直し,削除する.現在のコードページ(932)だとか Unicode 形式で保存してください だとか言う warning を回避できる.

                                int CV_UNREFERENCED(interpolate) )

デバッグOpenMP を用意できていないので,デバッグビルド時に omp.h を読み込むとき,_DEBUG を流したくない.cxmisc.h に次のような記述がある.

#ifdef _OPENMP
#include "omp.h"
#endif

これを先に述べたとおり書き換える.

#ifdef _OPENMP
#ifdef _DEBUG
    #undef _DEBUG
    #include "omp.h"
    #define _DEBUG
#else
    #include "omp.h"
#endif
#endif /* _OPENMP */

cvaux.h で文字化けが発生している.1167行目を手で打ち直して改める.

 CvMemStorage*   storage;      /*storage for foreground_regions*/                \

ビルド

メニューバー>ビルド>バッチビルドからプラットフォームが Win32 であるもののみを選択し,ビルドを実施する.

結果

成功した.デバッグビルドログの一部を示す.

1>zlib - エラー 0、警告 0
3>libpng - エラー 0、警告 0
2>cxcore - エラー 0、警告 0
5>libjpeg - エラー 0、警告 0
4>libtiff - エラー 0、警告 1
6>libjasper - エラー 0、警告 54
7>cv - エラー 0、警告 3
8>cxts - エラー 0、警告 0
9>ml - エラー 0、警告 0
11>highgui - エラー 0、警告 2
10>cvaux - エラー 0、警告 7
12>cvsample - エラー 0、警告 0
14>cxcoretest - エラー 0、警告 0
13>cvtest - エラー 0、警告 0
========== ビルド: 14 正常終了、0 失敗、0 更新不要、0 スキップ ==========

リリースビルドログの一部を示す.

1>zlib - エラー 0、警告 0
3>libpng - エラー 0、警告 0
4>libtiff - エラー 0、警告 0
5>libjpeg - エラー 0、警告 0
6>libjasper - エラー 0、警告 0
2>cxcore - エラー 0、警告 0
8>cxts - エラー 0、警告 0
9>ml - エラー 0、警告 0
10>highgui - エラー 0、警告 1
11>cxcoretest - エラー 0、警告 0
7>cv - エラー 0、警告 3
13>cvsample - エラー 0、警告 0
12>cvaux - エラー 0、警告 7
14>cvtest - エラー 0、警告 0
========== ビルド: 14 正常終了、0 失敗、0 更新不要、0 スキップ ==========

心配

JPEG2000 を扱うための第6プロジェクト libjasper のデバッグビルドが不完全と思われる.

6>.\jpc_tsfb.c(124) : warning C4013: 関数 'jpc_tsfb_analyze2' は定義されていません。int 型の値を返す外部関数と見なします。
6>.\jpc_tsfb.c(151) : warning C4013: 関数 'jpc_tsfb_synthesize2' は定義されていません。int 型の値を返す外部関数と見なします。
6>.\jpc_t1dec.c(243) : warning C4013: 関数 'jas_eprintf' は定義されていません。int 型の値を返す外部関数と見なします。
6>.\jas_getopt.c(129) : warning C4013: 関数 'jas_eprintf' は定義されていません。int 型の値を返す外部関数と見なします。