lol*_*ter 5 c++ java java-native-interface android opencv
忍受我 - 这是一个很长的描述,但我想包括所有细节.我正在尝试使用Android NDK和JNI来构建OpenCV Android应用程序.
我正在按照本教程安装所有内容:http: //www.stanford.edu/class/ee368/Android/Tutorial-2-OpenCV-for-Android-Setup-Macintosh-API8.pdf
以下安装就好了:
/usr/bin/g++
/usr/local/bin/swig
/usr/bin/cmake
/usr/bin/make
/Developer/pcre-8.32/
Run Code Online (Sandbox Code Playgroud)
我的.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
Run Code Online (Sandbox Code Playgroud)
使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
Run Code Online (Sandbox Code Playgroud)
然后再次尝试make在android-jni目录中,灾难来袭:
/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
Run Code Online (Sandbox Code Playgroud)
我想也许这是一个pkg-config错误,但似乎也设置了,虽然在我的旧版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
Run Code Online (Sandbox Code Playgroud)
此特定教程构建的安装已将opencv.pc文件放在此位置:
/Users/Me/Code/OpenCV/opencv/build/unix-install
Run Code Online (Sandbox Code Playgroud)
但运行以下并make再次尝试不能解决问题:
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/Users/Me/Code/OpenCV/opencv/build/unix-install
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚出了什么问题.我一直在和这个问题争吵大约一个月,最后需要一些外界意见.有任何想法吗?
小智 2
错误消息说
找不到-lopencv_calib3dcollect2:ld返回1退出状态
这意味着链接器找不到 opencv_calib3d 库。它可能具有名称 libopencv_calib3d.a 或 libopencv_calib3d.so。因此,您需要找到其中之一并将该文件的路径添加到 LD_LIBRARY_PATH 环境变量中。
我的意思是,如果假设文件夹 /Users/Me/Code/OpenCV/opencv/lib 包含 libopencv_calib3d.so 那么你需要在 make 之前执行如下所示的操作:
export LD_LIBRARY_PATH=/Users/Me/Code/OpenCV/opencv/lib:$LD_LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)