されましたが、Visual Studio 2005ではcxcoreが
ビルドエラーでコンパイルが通りません。
詳解OpenCV
cvinternal.h
で、SSE2〜SSE3の命令を有効化する為の定義がありますが、
標準でコンパイラのバージョンが新しければSIMD命令を
使うようになっています。
#if defined __SSE2__ || _MSC_VER >= 1300
#include "emmintrin.h"
#define CV_SSE 1
#define CV_SSE2 1
#if defined __SSE3__ || _MSC_VER >= 1400
#include "pmmintrin.h"
#define CV_SSE3 1
#endif
#else
#define CV_SSE 0
#define CV_SSE2 0
#define CV_SSE3 0
#endif
の定義がそれです。実行環境を限定できるなら良いですが、
SSEはともかくSSE2に対応していない少し古いPCでの
実行も考えると、実行時にエラーで落ちるなどの
問題が発生する事になりそうです。
というわけで
/*
#if defined __SSE2__ || _MSC_VER >= 1300
#include "emmintrin.h"
#define CV_SSE 1
#define CV_SSE2 1
#if defined __SSE3__ || _MSC_VER >= 1400
#include "pmmintrin.h"
#define CV_SSE3 1
#endif
#else
#define CV_SSE 0
#define CV_SSE2 0
#define CV_SSE3 0
#endif
*/
#include "emmintrin.h"
#define CV_SSE 1
#define CV_SSE2 0
#define CV_SSE3 0
としておきました。これでVisual Studio 2005でも
OpenCV 2.1のビルドが出来ました。
上記では、SSE命令だけは有効にしています。
流石にSSEは今時使えるでしょ。
#if defined __SSE3__ || _MSC_VER >= 1400
は個人的に_MSC_VER >= 1500(VS2008)な気がしてます.
あと,その変更だけだとintrin.hにバグがあるみたいでコンパイルエラーが出てしまうのでintrin.hに変更が必要です(あまりオススメできませんが。。。).http://bit.ly/dvtTU6
MSC_VER >= 1500(VS2008)
の間違いだと思います。VS2008 Express Edition
ではビルド通りますし :-)
SSE2を活かしたい場合、ご紹介いただいた
手段が有効そうですね。
当方、SSE2が乗ってない古いCPUでも
実行予定なので調べてませんでした。
ありがとうございます!!