移植opencv2.3.0到wince6

前期工作:
1、使用cmake2.8配置,去掉cuda、sse、sse2选项,修改/machine:X86为/machine:thumb,修改lib为coredll.lib corelibc.lib ole32.lib oleaut32.lib uuid.lib commctrl.lib
2、如果安装有PB6导出的设备SDK需要将头文件和库文件路径优先VS2005自带的路径,否则会有STL编译错误
3、对于一些WINCE没有的CRT函数,使用WINCE的CRT包装库wceshunt(需要的地方引入wceshunt.h),对于没有的CRT头文件通过宏定义_WIN32_WCE来去掉引用

编译工作
1、zlib
(1)加入预编译项
NO_ERRNO_H
_WIN32_WCE=$(CEVER)
UNICODE
_UNICODE
UNDER_CE
(2)加入wceshunt.h头文件路径
(3)头文件引用修改
去掉zconf.h中types.h引用
去掉gzguts.h中fcntl.h、io.h引用

2、libjpeg
(1)加入预编译项
NO_GETENV
UNICODE
_UNICODE
WINCE
UNDER_CE
$(ARCHFAM)
$(_ARCHFAM_)
_WIN32_WCE=$(CEVER)
(2)找不到tmpfile,wceshunt中加一个空函数返回NULL

3、libpng
(1)加入预编译项
_WIN32_WCE=$(CEVER)
$(ARCHFAM)
$(_ARCHFAM_)
UNDER_CE
WINCE
UNICODE
_UNICODE
(2)去掉pngconf.h中types.h引用,加入wceshunt.h引用,头文件前面加#define WCESHUNT_STATICLIB

4、opencv_core
(1)加入预编译项
WINCE
_WIN32_WCE=$(CEVER)
$(ARCHFAM)
$(_ARCHFAM_)
UNICODE
_UNICODE
UNDER_CE
(2)加入wceshunt.h头文件路径
(3)去掉operaions.hpp对intrin.h的引用
另外,CV_XADD宏定义是MIPS的,加入ARM的定义
(4)xmmintrin.h中的宏定义__m128、emmintrin.h中的宏定义__m128i、__m128d要去掉_CRT_ALIGN(16),否则会编译出错 'A': formal parameter with __declspec(align('16')) won't be aligned,原因见http://community.psion.com/discussions/f/160/p/4087/16442.aspx,抄录如下
That header file is not a Psion generated file, but rather part of the standard Microsoft header offering (that file is also in STANDARDSDK as well).

With that said, the ARM compiler isn't going to allow you to align on anything less than 32 bit boundaries.  Looks like the file is x86-centric.

You could save a copy of that header, and then change that file directly to remove the 'align' directive (especially if you're planning on spending all your time on ARM).
(5)去掉system.cpp中对intrin.h的引用,tempfile在WINCE下无对应函数需要进行修改
(6)persistence.cpp找不到rewind,加入wceshunt.h引用,在头文件前头面加#define WCESHUNT_STATICLIB
(7)matrix.cpp对于std::max、std::abs存在二义性,这两个是模板函数需要指定参数类型
(8)internal.hpp中CV_SSE和CV_SSE2设为0,否则会有大量的链接错误(此文件中有关于NEON宏定义)
(9)链接提示找不到wce_rewind错误,建立和wceshunt.lib的依赖关系,设置链接参数“Link Library Dependencies”为“Yes”
(10)链接提示zlib找不到函数open、read、write、close,用另外一个库wceshunt,加放头文件wceshunt.h的路径。修改gzlib.c加入wceshunt.h引用,头文件前面加#define WCESHUNT_STATICLIB
(11)编译提示_strtoui64已经在msvcrt中定义了,修改wceshunt的_strtoui64为wce_strtoui64

5、opencv_imgproc
(1)加入预编译项
WINCE
_WIN32_WCE=$(CEVER)
$(ARCHFAM)
$(_ARCHFAM_)
UNICODE
_UNICODE
UNDER_CE

6、opencv_flann
(1)加入预编译项
WINCE
_WIN32_WCE=$(CEVER)
$(ARCHFAM)
$(_ARCHFAM_)
UNICODE
_UNICODE
UNDER_CE
(2)timer.h提示找不到clock函数,替换成GetTickCount

7、opencv_ml
(1)加入预编译项
WINCE
_WIN32_WCE=$(CEVER)
$(ARCHFAM)
$(_ARCHFAM_)
UNICODE
_UNICODE
UNDER_CE

8、opencv_highgui
(1)加入预编译项
WINCE
_WIN32_WCE=$(CEVER)
$(ARCHFAM)
$(_ARCHFAM_)
UNICODE
_UNICODE
UNDER_CE
(2)加入wceshunt.h头文件路径
(3)去掉comctl32.lib、gdi32.lib、vfw32.lib
(4)exclude所有cap相关文件,注释precomp.hpp中所有与cvcap相关内容,cvconfig.h中加入CV_NO_VIDEO_CAPTURE_CPP_API宏定义
(6)loadsave.cpp提示找不到remove,加入wceshunt.h引用,在头文件前头面加#define WCESHUNT_STATICLIB
(7)window_win32.cpp中多宽字符函数及找不到的WIN32函数,在wceshunt.h的前面加上WCESHUNT_STATICLIB、USE_WCEEXTS_H宏定义,还是没有的WIN32函数在wceexts.h中自行添加
另外,加宏定义#define GCL_HBRBACKGROUND   (-10)

9、opencv_features2d
10、opencv_calib3d
11、opencv_video
12、opencv_objdetect
13、opencv_contrib
14、opencv_legacy
15、opencv_gpu
(1)加入预编译项
WINCE
_WIN32_WCE=$(CEVER)
$(ARCHFAM)
$(_ARCHFAM_)
UNICODE
_UNICODE
UNDER_CE

16、opencv_haartraining_engine
opencv_haartraining
opencv_performance
opencv_traincascade
opencv_stitching
opencv_createsamples

17、install
修改cmake_install.cmake中的文件路径,删除错误拷贝的x86版本msvcm80等几个DLL及opencv_ffmpeg.dll

18、package
需要安装NSIS,生成opencv的安装文件

==================================

2016.3.10补充

1、下载opencv-2.3.0安装包,安装到指定目录,如d:\opencv-2.3.0;

2、cmake配置选择vs2005,设置编译工作目录为d:\opencv-2.3.0\build\WINCE,会在下面生成opencv.sln和若干子工程;

3、源代码补丁更新,将patch1的相关代码(带路径)拷贝到opencv根目录下;

4、打开OpenCV.sln,选择对应的SDK后,将“ALL_BUILD”、“opencv_ffmpeg”、“uninstall”、“ZERO_CHECK”四个工程unload掉,设置默认工程为opencv_highgui。按之前描述修改各工程配置;

5、新建子工程wceshunt(静态库形式)到方案中,新工程存放路径为d:\opencv-2.3.0\build\WINCE\3rdparty。由于是静态库需要增加预编译项WCESHUNT_STATICLIB,添加相关源代码到工程中,各文件路径设置可以如:

wceshunt\build\wceshunt.vcproj

wceshunt\include\*.h

wceshunt\*.cpp

因为根据需要修改过原来的代码,可以将patch2的相关代码(带路径)拷贝到opencv根目录下;

6、在方案编译过程中,如果某个子工程出现与wceshunt相关的编译错误,则在此子工程头文件路径中增加"..\..\3rdparty\wceshunt\include";出现链接错误则设置此子工程依赖(Project Dependencies)于wceshunt工程;

patch1和patch2代码在http://download.csdn.net/detail/alien75/9457282下载;

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 23
    评论
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值