在android模拟器上面执行OpenCV函数一闪就退出的解决方法
2011-07-25 17:31
225 查看
这几天在练习一个在android上面进行图片格式转换的例子,我的开发环境是winXP+cygwin+openCV+NDK(r4 crystax),这个例子用openCV来做再合适不过了.在windows上面VS开发其实就下面这几句代码:
在android上面做这个开发,需要用到ndk.openCV和NDK配置过程比较麻烦,csdn上面很多人的博客上面都有介绍.配置完成之后,代码也写好了.Android.mk文件也仿造别人的写好了,.so文件也顺利编译出来了,开始在模拟器上面运行,结果程序一闪就退出了.如果去掉openCV函数的代码,程序可以正常运行.据此可以判断问题就出现在openCV的函数上
面.Google出来的结果发现有人曾经遇到过这个问题,一种说法是在真机上面运行就不会出现这个问题,如果在模拟器上面就会出现这个问题.但是手头上面没有真机,所以这个方法无法验证.
继续找看有没有其他的方法,在http://blogold.chinaunix.net/u1/57901/showart_2512389.html这篇博文里面也提到了这个问题,而且给出了具体的解决方案,以下是这个解决方案的说明:"这时候编译出来的程序还不能在虚拟机中运行,一运行就会闪一下跳出来,这是因为opencv的android库中有V5和V7两种ARM架构的库,我发现一般都会优先运行V7架构的ARM库,但是虚拟机应该是个V5架构的,所以会马上退出,我的G2手机也一样,所以这时候还要对OpenCV-2.2.0/android/build/android-opencv.mk文件进行修改来让程序在V5架构的ARM上运行".但是这篇文章所讲的是在linux下解决方法,我并没有找到文中所提到的android-opencv.mk以及相关的.mk文件.所以这种方法最终还是没有解决我的问题.
在google code中的android-opencv板块中有人也出现了这个问题,其中有一个人的回答解决了我的问题.解决方法是需要在android.mk中添加下面的静态库:
参考URL:http://code.google.com/p/android-opencv/issues/detail?id=7(12楼和14楼的回答)
这些库需要从从C:\cygwin\home\user\trunk\opencv\obj\local\armeabi这个目录中将这些.a静态库文件copy 到自己程序的obj\local\armeabi目录中去.这时再ndk-build,重新在模拟器上运行程序.(具体的目录需要替换成自己的实际的opencv以及程序的目录).这些静态库是以.a为扩展名的,而且openCV的版本不同,可能这些库的名字也不同.做完以上改变,重新编译我们的cpp文件,然后重新build程序在模拟器上运行.这时一切都正常了
稍后会把这个图片格式转换的程序整理一下,把整个过程写出来.
转载请注明出处:http://blog.csdn.net/fenghaibo00
IplImage* img = cvLoadImage(szOriPic); cvSaveImage( szNewPic , img); cvReleaseImage( &img );
在android上面做这个开发,需要用到ndk.openCV和NDK配置过程比较麻烦,csdn上面很多人的博客上面都有介绍.配置完成之后,代码也写好了.Android.mk文件也仿造别人的写好了,.so文件也顺利编译出来了,开始在模拟器上面运行,结果程序一闪就退出了.如果去掉openCV函数的代码,程序可以正常运行.据此可以判断问题就出现在openCV的函数上
面.Google出来的结果发现有人曾经遇到过这个问题,一种说法是在真机上面运行就不会出现这个问题,如果在模拟器上面就会出现这个问题.但是手头上面没有真机,所以这个方法无法验证.
继续找看有没有其他的方法,在http://blogold.chinaunix.net/u1/57901/showart_2512389.html这篇博文里面也提到了这个问题,而且给出了具体的解决方案,以下是这个解决方案的说明:"这时候编译出来的程序还不能在虚拟机中运行,一运行就会闪一下跳出来,这是因为opencv的android库中有V5和V7两种ARM架构的库,我发现一般都会优先运行V7架构的ARM库,但是虚拟机应该是个V5架构的,所以会马上退出,我的G2手机也一样,所以这时候还要对OpenCV-2.2.0/android/build/android-opencv.mk文件进行修改来让程序在V5架构的ARM上运行".但是这篇文章所讲的是在linux下解决方法,我并没有找到文中所提到的android-opencv.mk以及相关的.mk文件.所以这种方法最终还是没有解决我的问题.
在google code中的android-opencv板块中有人也出现了这个问题,其中有一个人的回答解决了我的问题.解决方法是需要在android.mk中添加下面的静态库:
参考URL:http://code.google.com/p/android-opencv/issues/detail?id=7(12楼和14楼的回答)
LOCAL_C_INCLUDES += $(OPENCV_INCLUDES) LOCAL_STATIC_LIBRARIES := calib3d features2d objdetect imgproc \ video highgui ml legacy core libopencv_lapack flann \ libzlib libpng libjpeg libjasper
这些库需要从从C:\cygwin\home\user\trunk\opencv\obj\local\armeabi这个目录中将这些.a静态库文件copy 到自己程序的obj\local\armeabi目录中去.这时再ndk-build,重新在模拟器上运行程序.(具体的目录需要替换成自己的实际的opencv以及程序的目录).这些静态库是以.a为扩展名的,而且openCV的版本不同,可能这些库的名字也不同.做完以上改变,重新编译我们的cpp文件,然后重新build程序在模拟器上运行.这时一切都正常了
稍后会把这个图片格式转换的程序整理一下,把整个过程写出来.
转载请注明出处:http://blog.csdn.net/fenghaibo00
相关文章推荐
- 试图执行的查询中不包含作为合计函数一部分的特定表达式的解决方法
- PHP执行函数超时,执行数据库超时等问题解决方法(9元包邮)
- onload js函数不执行的原因分析及解决方法
- 正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起。问题的解决方法!
- [ASP.NET] 自定义控件的 onkeypress 在 javascript 函数返回false 依旧继续执行的解决方法(教训)
- CAD调试时抛出“正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码”异常的解决方法
- window.onload同时执行多个函数的解决方法
- 执行PHP程序报date()函数异常解决方法
- OpenCV中用findContours函数出现的问题和解决方法
- 使用OpenCv库的MFC程序在退出后报内存泄露Detected memory leaks! 可能解决方法
- MATLAB提示:‘尝试将script XXX.m作为函数执行’解决方法
- 关于TimePickerDialog中OnTimeSet()函数执行两次的解决方法
- OpenCV2.2调用highgui函数总是出错,一种可能的解决方法
- onload js函数不执行的原因分析及解决方法
- onload js函数不执行的原因分析及解决方法
- onload js函数不执行的原因分析及解决方法
- 试图执行的查询中不包含作为合计函数一部分的特定表达式的解决方法
- javasciprt下jquery函数$.post执行无响应的解决方法
- 正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起。问题的解决方法!
- 使用OpenCv库的MFC程序在退出后报内存泄露 可能解决方法