【问题标题】:Compiling Android JNI for OpenCV on Mac OSX在 Mac OSX 上为 OpenCV 编译 Android JNI
【发布时间】:2013-05-04 14:09:35
【问题描述】:

请耐心等待 - 这是一个很长的描述,但我想包含所有细节。我正在尝试使用 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/

我的 .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-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 

此特定教程构建的安装已将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

我不知道出了什么问题。我一直在与这个问题作斗争大约一个月,最后需要一些外部意见。有什么想法吗?

【问题讨论】:

  • 我的只是好奇。你为什么使用 android-ndk-r4-crystax ?它至少有两岁?可以尝试用较新的 ndk 编译吗?

标签: java android c++ opencv java-native-interface


【解决方案1】:

【讨论】:

  • 是的,我以前见过。但这并不是我问题的真正答案。
【解决方案2】:

错误信息说

找不到 -lopencv_calib3d collect2: 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

【讨论】:

    猜你喜欢
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 2010-10-08
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    相关资源
    最近更新 更多