2011-03-14 172 views
4

请在底部看到附加内容!第一个问题在Linux中解决,而不是在Windows和Cygwin下,但是还有一个新问题。请看下面!在Android NDK中编译OpenCV

我目前正在尝试为Android NDK编译OpenCV,以便我可以在我的应用程序中使用它。为此,我试图按照本指南:

http://www.stanford.edu/~zxwang/android_opencv.html

但随着NDK建造编译下载的东西,当我得到这个错误:

$ /cygdrive/u/flori/workspace/android-ndk-r5b/ndk-build 
Compile++ thumb : opencv <= cvjni.cpp 
Compile++ thumb : cxcore <= cxalloc.cpp 
Compile++ thumb : cxcore <= cxarithm.cpp 
Compile++ thumb : cxcore <= cxarray.cpp 
Compile++ thumb : cxcore <= cxcmp.cpp 
Compile++ thumb : cxcore <= cxconvert.cpp 
Compile++ thumb : cxcore <= cxcopy.cpp 
Compile++ thumb : cxcore <= cxdatastructs.cpp 
Compile++ thumb : cxcore <= cxdrawing.cpp 
Compile++ thumb : cxcore <= cxdxt.cpp 
Compile++ thumb : cxcore <= cxerror.cpp 
Compile++ thumb : cxcore <= cximage.cpp 
Compile++ thumb : cxcore <= cxjacobieigens.cpp 
Compile++ thumb : cxcore <= cxlogic.cpp 
Compile++ thumb : cxcore <= cxlut.cpp 
Compile++ thumb : cxcore <= cxmathfuncs.cpp 
Compile++ thumb : cxcore <= cxmatmul.cpp 
Compile++ thumb : cxcore <= cxmatrix.cpp 
Compile++ thumb : cxcore <= cxmean.cpp 
Compile++ thumb : cxcore <= cxmeansdv.cpp 
Compile++ thumb : cxcore <= cxminmaxloc.cpp 
Compile++ thumb : cxcore <= cxnorm.cpp 
Compile++ thumb : cxcore <= cxouttext.cpp 
Compile++ thumb : cxcore <= cxpersistence.cpp 
Compile++ thumb : cxcore <= cxprecomp.cpp 
Compile++ thumb : cxcore <= cxrand.cpp 
Compile++ thumb : cxcore <= cxsumpixels.cpp 
Compile++ thumb : cxcore <= cxsvd.cpp 
Compile++ thumb : cxcore <= cxswitcher.cpp 
Compile++ thumb : cxcore <= cxtables.cpp 
Compile++ thumb : cxcore <= cxutils.cpp 
StaticLibrary : libstdc++.a 
StaticLibrary : libcxcore.a 
Compile++ thumb : cv <= cvaccum.cpp 
Compile++ thumb : cv <= cvadapthresh.cpp 
Compile++ thumb : cv <= cvapprox.cpp 
Compile++ thumb : cv <= cvcalccontrasthistogram.cpp 
Compile++ thumb : cv <= cvcalcimagehomography.cpp 
Compile++ thumb : cv <= cvcalibinit.cpp 
Compile++ thumb : cv <= cvcalibration.cpp 
Compile++ thumb : cv <= cvcamshift.cpp 
Compile++ thumb : cv <= cvcanny.cpp 
Compile++ thumb : cv <= cvcolor.cpp 
Compile++ thumb : cv <= cvcondens.cpp 
Compile++ thumb : cv <= cvcontours.cpp 
Compile++ thumb : cv <= cvcontourtree.cpp 
Compile++ thumb : cv <= cvconvhull.cpp 
Compile++ thumb : cv <= cvcorner.cpp 
Compile++ thumb : cv <= cvcornersubpix.cpp 
Compile++ thumb : cv <= cvderiv.cpp 
Compile++ thumb : cv <= cvdistransform.cpp 
Compile++ thumb : cv <= cvdominants.cpp 
Compile++ thumb : cv <= cvemd.cpp 
Compile++ thumb : cv <= cvfeatureselect.cpp 
Compile++ thumb : cv <= cvfilter.cpp 
Compile++ thumb : cv <= cvfloodfill.cpp 
Compile++ thumb : cv <= cvfundam.cpp 
Compile++ thumb : cv <= cvgeometry.cpp 
Compile++ thumb : cv <= cvhaar.cpp 
Compile++ thumb : cv <= cvhistogram.cpp 
Compile++ thumb : cv <= cvhough.cpp 
Compile++ thumb : cv <= cvimgwarp.cpp 
Compile++ thumb : cv <= cvinpaint.cpp 
Compile++ thumb : cv <= cvkalman.cpp 
Compile++ thumb : cv <= cvlinefit.cpp 
Compile++ thumb : cv <= cvlkpyramid.cpp 
Compile++ thumb : cv <= cvmatchcontours.cpp 
Compile++ thumb : cv <= cvmoments.cpp 
Compile++ thumb : cv <= cvmorph.cpp 
Compile++ thumb : cv <= cvmotempl.cpp 
Compile++ thumb : cv <= cvoptflowbm.cpp 
Compile++ thumb : cv <= cvoptflowhs.cpp 
Compile++ thumb : cv <= cvoptflowlk.cpp 
Compile++ thumb : cv <= cvpgh.cpp 
Compile++ thumb : cv <= cvposit.cpp 
Compile++ thumb : cv <= cvprecomp.cpp 
Compile++ thumb : cv <= cvpyramids.cpp 
Compile++ thumb : cv <= cvpyrsegmentation.cpp 
Compile++ thumb : cv <= cvrotcalipers.cpp 
Compile++ thumb : cv <= cvsamplers.cpp 
Compile++ thumb : cv <= cvsegmentation.cpp 
Compile++ thumb : cv <= cvshapedescr.cpp 
Compile++ thumb : cv <= cvsmooth.cpp 
Compile++ thumb : cv <= cvsnakes.cpp 
Compile++ thumb : cv <= cvstereobm.cpp 
Compile++ thumb : cv <= cvstereogc.cpp 
Compile++ thumb : cv <= cvsubdivision2d.cpp 
Compile++ thumb : cv <= cvsumpixels.cpp 
Compile++ thumb : cv <= cvsurf.cpp 
Compile++ thumb : cv <= cvswitcher.cpp 
Compile++ thumb : cv <= cvtables.cpp 
Compile++ thumb : cv <= cvtemplmatch.cpp 
Compile++ thumb : cv <= cvthresh.cpp 
Compile++ thumb : cv <= cvundistort.cpp 
Compile++ thumb : cv <= cvutils.cpp 
StaticLibrary : libcv.a 
SharedLibrary : libopencv.so 
U:/flori/workspace/android-ndk-r5b/toolchains/arm-linux-androideabi-4.4.3/prebui 
lt/windows/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-andr 
oideabi/bin/ld.exe: cannot find -lcxcore 
collect2: ld returned 1 exit status 
make: *** [/cygdrive/u/flori/workspace/android/testOpenCV/obj/local/armeabi/libo 
pencv.so] Error 1 

我试图编译它在Windows系统上并与最新的NDK版本...

有没有人有一个想法这个链接错误意味着什么,我可以让它再次工作?

将是巨大的,如果有人可以帮助


得到问题的工作,我发现,有编制的OpenCV的Android使用的OpenCV的当前版本(而不是1.1一个从另一种方式后以上)以及来自crystax的修改的Android NDK,它支持STL和异常,因此支持最新的OpenCV版本。

的所有信息上可以在这里找到: http://opencv.willowgarage.com/wiki/Android

有它说下载当前SVN主干和crystax-R4的Android NDK,以及痛饮,我做到了。

我进入了文件夹,创建了构建目录,运行cmake,然后构建了静态库,这似乎工作。至少它成功运行make-command而没有错误。

我现在想建立的共享库,所以我进入了Android的JNI文件夹,并跑了“使”了,但得到这个错误:

% make -j4 
OPENCV_CONFIG = ../build/android-opencv.mk 
make clean-swig &&\ 
    mkdir -p jni/gen &&\ 
    mkdir -p src/com/opencv/jni &&\ 
    swig -java -c++ -package "com.opencv.jni" \ 
    -outdir src/com/opencv/jni \ 
    -o jni/gen/android_cv_wrap.cpp jni/android-cv.i 
OPENCV_CONFIG = ../build/android-opencv.mk 
make[1]: Entering directory `/home/florian/android-opencv-willowgarage/android/android-jni' 
make[1]: warning: jobserver unavailable: using -j1. Add `+' to parent make rule. 
rm -f jni/gen/android_cv_wrap.cpp 
make[1]: Leaving directory `/home/florian/android-opencv-willowgarage/android/android-jni' 
/home/florian/android-ndk-r4-crystax/ndk-build OPENCV_CONFIG=../build/android-opencv.mk \ 
    PROJECT_PATH= ARM_TARGETS="armeabi armeabi-v7a" V= 
/home/florian/android-ndk-r4-crystax/ndk-build OPENCV_CONFIG=../build/android-opencv.mk \ 
    PROJECT_PATH= ARM_TARGETS="armeabi armeabi-v7a" V= 
make[1]: Entering directory `/home/florian/android-opencv-willowgarage/android/android-jni' 
/home/florian/android-opencv-willowgarage/android/android-jni/jni/Android.mk:10: ../build/android-opencv.mk: No such file or directory 
make[1]: Entering directory `/home/florian/android-opencv-willowgarage/android/android-jni' 
/home/florian/android-opencv-willowgarage/android/android-jni/jni/Android.mk:10: ../build/android-opencv.mk: No such file or directory 
/home/florian/android-opencv-willowgarage/android/android-jni/jni/Android.mk:10: ../build/android-opencv.mk: No such file or directory 
make[1]: warning: jobserver unavailable: using -j1. Add `+' to parent make rule. 
/home/florian/android-opencv-willowgarage/android/android-jni/jni/Android.mk:10: ../build/android-opencv.mk: No such file or directory 
make[1]: *** No rule to make target `../build/android-opencv.mk'. Stop. 
make[1]: Leaving directory `/home/florian/android-opencv-willowgarage/android/android-jni' 
make: *** [libs/armeabi/libandroid-opencv.so] Error 2 
make: *** Waiting for unfinished jobs.... 
make[1]: warning: jobserver unavailable: using -j1. Add `+' to parent make rule. 
make[1]: *** No rule to make target `../build/android-opencv.mk'. Stop. 
make[1]: Leaving directory `/home/florian/android-opencv-willowgarage/android/android-jni' 
make: *** [libs/armeabi-v7a/libandroid-opencv.so] Error 2 

没有任何人有一个想法,这是什么意思,什么我可以做建立共享库吗?

...

确定在看看它来找我,它似乎有东西在build目录中缺少......但没有连build目录在Android的错误消息后文件夹,所以我创建了一个,在那里跑“cmake的”和“做”了,但得到这个错误:

Compile thumb : opencv_lapack <= /home/florian/android-opencv-willowgarage/3rdparty/lapack/sgetrf.c 
Compile thumb : opencv_lapack <= /home/florian/android-opencv-willowgarage/3rdparty/lapack/scopy.c 
Compile++ thumb: opencv_core <= /home/florian/android-opencv-willowgarage/modules/core/src/matrix.cpp 
cc1plus: error: /home/florian/android-opencv-willowgarage/android/../modules/index.rst/include: Not a directory 
make[3]: *** [/home/florian/android-opencv-willowgarage/android/build/obj/local/armeabi/objs/opencv_core/src/matrix.o] Error 1 
make[3]: *** Waiting for unfinished jobs.... 
make[2]: *** [android-opencv] Error 2 
make[1]: *** [CMakeFiles/ndk.dir/all] Error 2 
make: *** [all] Error 2 

任何人都知道这意味着什么?

回答

0

我刚刚在Linux上用ndk-r5b构建它。你有default.properties文件在你的项目目录(而不是jni)有类似以下内容:

target=android-8 

如果没有,你可能会再次尝试建立它和建筑。

+0

我有这个文件,它包含:target = android-3 ...可能是一个问题,我正在使用WIndows呢?所以这可能是缺少的东西,通常会自动包含在Linux中? – evident

+0

怎么样尝试android-8? –

+0

你已经建立了它正在寻找的库。我想知道如果不同的平台正在改变你的Android.mk被解释的方式。 –