Java 在Mac OSX上为OpenCV编译Android JNI

Java 在Mac OSX上为OpenCV编译Android JNI,java,android,c++,opencv,java-native-interface,Java,Android,C++,Opencv,Java Native Interface,请容忍我-这是一个很长的描述,但我想包括所有细节。我正在尝试使用android NDK和JNI构建OpenCV android应用程序 我将按照本教程安装所有内容: 以下各项安装得很好: /usr/bin/g++ /usr/local/bin/swig /usr/bin/cmake /usr/bin/make /Developer/pcre-8.32/ my.bashrc文件的内容: export NDK=/Users/Me/Code/Android/android-ndk-r4-crys

请容忍我-这是一个很长的描述,但我想包括所有细节。我正在尝试使用android NDK和JNI构建OpenCV android应用程序

我将按照本教程安装所有内容:

以下各项安装得很好:

/usr/bin/g++
/usr/local/bin/swig
/usr/bin/cmake
/usr/bin/make
/Developer/pcre-8.32/
my.bashrc文件的内容:

export  NDK=/Users/Me/Code/Android/android-ndk-r4-crystax
export  SDK=/Users/Me/Code/Android/adt-bundle-mac-x86_64-20130219/
export  OPCV=/Users/Me/Code/OpenCV/opencv
export  PATH=$NDK:$SDK/tools:$SDK/platform-tools:$PATH
export NDK_ROOT=$NDK
制作OpenCV库进展顺利

由于对使用
make
的投诉,我不得不在
/Users/Me/code/OpenCV/OpenCV/android/android jni/local.env.mk
中进行了一次小的编辑,看起来是这样的:

#ANDROID_NDK_ROOT=$(HOME)/android-ndk-r4-crystax
ANDROID_NDK_ROOT=/Users/Me/Code/Android/android-ndk-r4-crystax
然后在android jni目录中再次尝试
make
,灾难发生了:

/Users/Me/Code/Android/android-ndk-r4-crystax/ndk-build OPENCV_CONFIG=../build/android-opencv.mk \
    PROJECT_PATH= ARM_TARGETS="armeabi armeabi-v7a" V= 
Gdbserver      : [arm-eabi-4.4.0] /Users/Me/Code/OpenCV/opencv/android/android-jni/libs/armeabi/gdbserver
Gdbsetup       : /Users/Me/Code/OpenCV/opencv/android/android-jni/libs/armeabi/gdb.setup
Gdbsetup       : + source directory /Users/Me/Code/OpenCV/opencv/android/android-jni/jni
Gdbserver      : [arm-eabi-4.4.0] /Users/Me/Code/OpenCV/opencv/android/android-jni/libs/armeabi-v7a/gdbserver
Gdbsetup       : /Users/Me/Code/OpenCV/opencv/android/android-jni/libs/armeabi-v7a/gdb.setup
Gdbsetup       : + source directory /Users/Me/Code/OpenCV/opencv/android/android-jni/jni
SharedLibrary  : libandroid-opencv.so
/Users/Me/Code/Android/android-ndk-r4-crystax/build/prebuilt/darwin-x86/arm-eabi-4.4.0/bin/../lib/gcc/arm-eabi/4.4.0/../../../../arm-eabi/bin/ld: cannot find -lopencv_calib3d
collect2: ld returned 1 exit status
make[1]: *** [/Users/Me/Code/OpenCV/opencv/android/android-jni/obj/local/armeabi/libandroid-opencv.so] Error 1
make: *** [libs/armeabi-v7a/libandroid-opencv.so] Error 2
我认为这可能是一个pkg配置错误,但这似乎也是设置好的,尽管在我以前安装的OpenCV中。下面是pkg config--cflags--libs opencv的输出:

-I/usr/include/opencv  /usr/lib/libopencv_calib3d.dylib /usr/lib/libopencv_contrib.dylib /usr/lib/libopencv_core.dylib /usr/lib/libopencv_features2d.dylib /usr/lib/libopencv_flann.dylib /usr/lib/libopencv_gpu.dylib /usr/lib/libopencv_highgui.dylib /usr/lib/libopencv_imgproc.dylib /usr/lib/libopencv_legacy.dylib /usr/lib/libopencv_ml.dylib /usr/lib/libopencv_nonfree.dylib /usr/lib/libopencv_objdetect.dylib /usr/lib/libopencv_photo.dylib /usr/lib/libopencv_stitching.dylib /usr/lib/libopencv_ts.dylib /usr/lib/libopencv_video.dylib /usr/lib/libopencv_videostab.dylib 
本教程构建的安装程序在以下位置放置了一个
opencv.pc
文件:

/Users/Me/Code/OpenCV/opencv/build/unix-install
但运行以下命令并再次尝试
make
并不能解决问题:

export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/Users/Me/Code/OpenCV/opencv/build/unix-install

我想不出是怎么回事。我已经断断续续地与这个问题斗争了大约一个月,最后需要一些外界的意见。有什么想法吗?

试试OpenCV4Android官方教程,错误消息是

找不到-lopencv_calib3d collect2:ld返回1退出状态

这意味着链接器找不到opencv_calib3d库。它的名称可能是libopencv_calib3d.a或libopencv_calib3d.so。因此,您需要找到其中一个,并将此文件的路径添加到LD_LIBRARY_path env变量中

我的意思是,如果文件夹/Users/Me/Code/OpenCV/OpenCV/lib包含libopencv_calib3d,那么在生成之前,您需要执行以下操作:

export LD_LIBRARY_PATH=/Users/Me/Code/OpenCV/opencv/lib:$LD_LIBRARY_PATH

是的,我以前见过。但这并不是我问题的答案,我只是好奇而已。你为什么要使用android-ndk-r4-crystax?至少有两年了?您可以尝试使用较新的ndk进行编译吗?