不幸的是,OpenCV管理器在android 4.2(Mac OSX 10.7)的OpenCV 2.4.3中停止运行
我在运行openCV示例项目(3-4)时遇到问题。每次运行该程序时,我都会发现问题“不幸的是OpenCV管理器已停止”显示在我的Android仿真器中 每次我打电话都会出现问题 initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3,this,mLoaderCallback) 我看了这一页 这是我收到的警告信息 /Applications/eclipse-android/android-ndk-r8c/toolschains/arm-linux-androideabi-4.6/prebuild/darwin-x86/bin//lib/gcc/arm-linux-androideabi/4.6/../../../../../../../arm linux-androideabi/bin/ld: 警告:中隐藏符号“\uuuu aeabi\u atexit” ./obj/local/armeabi-v7a/libgnustl_static.a(atexit_arm.o)参考 由DSO提供 /Applications/eclipseandroid/OpenCV-2.4.3-android-sdk/sdk/native/jni/。/libs/armeabi-v7a/libopencv_java.so Logcat(来自OpenCV样本4): gralloc_goldfish,org.opencv.samples.tutorial4无GPU仿真器 检测到模拟 注:不幸的是,OpenCV管理器在android 4.2(Mac OSX 10.7)的OpenCV 2.4.3中停止运行,android,opencv,android-ndk,java-native-interface,Android,Opencv,Android Ndk,Java Native Interface,我在运行openCV示例项目(3-4)时遇到问题。每次运行该程序时,我都会发现问题“不幸的是OpenCV管理器已停止”显示在我的Android仿真器中 每次我打电话都会出现问题 initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3,this,mLoaderCallback) 我看了这一页 这是我收到的警告信息 /Applications/eclipse-android/android-ndk-r8c/toolschains/arm-linux-androide
您的问题可能只是仿真器本身,请尝试使用实际设备进行测试。
emulator无法处理很多事情。我这几天在运行这两个教程时也遇到了问题 在我的机器上,我安装了opencv2.4.3、Android-sdk-21和Android-ndk-r8c、eclipsejuno。我在运行安卓4.0.3的华硕Transformer tf101g上进行测试 当我运行教程时,它失败了,出现了一个奇怪的
ClassNotFoundException
。检查项目属性时,我发现这两个项目在错误的位置查找标题。转到项目->属性->C/C++常规->路径和符号。在这里,您可以看到jni文件中使用的include目录
在我的系统中没有设置NDKROOT环境变量,我必须手动将其设置为指向NDK根文件夹
然后,我不得不将stl include从
${NDKROOT}/sources/cxx-stl/gnu-libstdc++/include
到
希望这能有所帮助。如果您使用安卓4.2,请改为4.0.3或4.1。这其中有一个bug:我也为此挣扎了将近4个小时,包括将目标降级到4.0.3,但没有成功。
解决方案是将最新的openCV管理器从google play直接下载到您的设备上。我也遇到了同样的错误,我认为即使很晚了,这个解决方案可能对将来的一些人有所帮助。
如果android设备硬件(如armeabi-v7a(ARMv7-A+NEON)或Intel x86等)不支持OpenCV管理器的版本,则会弹出错误“不幸的是OpenCV管理器已停止”。卸载当前管理器并安装正确的管理器。我遇到了相同的问题: DSO引用了隐藏符号“uuu aeabi_atexit”armeabi-v7a/libgnustl_static.a(atexit_arm.o) 我在jni中使用opencv测试,在我添加它之前,这个应用程序已经运行了。 我已尝试在“Application.mk”中将ARMv7-A机器更改为armeabi 我还尝试将上面提到的所有路径添加到项目->属性->C/C++常规->路径和符号中 它不起作用。 多亏了我的团队领导,我找到了解决方案: 在Application.mk中,您需要更改APP_STL:=gnustl_static 到APP_STL:=gnustl_shared。这是因为lib显然是在shared而不是static中编译的。 此外,将lib:System.loadlibrary(“gnustl_共享”)添加到loadlibrary区域; 这应在静态区域进行,如下所示:
static {
try{
System.loadLibrary("gnustl_shared");
//To do - add your static code
}
catch(UnsatisfiedLinkError e) {
Log.v(TAG, "Native code library failed to load.\n" + e);
}
catch(Exception e) {
Log.v(TAG, "Exception: " + e);
}
}
就这样!它解决了我的问题。。。
希望有帮助
Inbal在onCreate()方法之前粘贴以下代码:
这对我来说是有用的。< / P>我在OpenCV找到了Android文档……“同时,请考虑教程0和教程1的示例使用java Android API,它可以从Android SDK上的模拟器中获得。其他示例使用OpenCV本机摄像头,可能无法与emulator配合使用。“谢谢您的评论:)用绝对路径替换NDKROOT..以确保问题不是来自环境变量。我添加了另一个绝对包含路径,但我还定义了NDKROOT环境变量,因为如果我没有错,它会在其他地方使用(我现在没有代码)并将其添加到Eclipse的窗口首选项中。这是我的包含路径;(1)${NDKROOT}/platforms/android-9/arch-arm/usr/include(2)${NDKROOT}/sources/cxx stl/gnu libstdc++/4.6/include(3)${NDKROOT}/sources/cxx stl/gnu libstdc++/4.6/libs/armeabi-v7a/include(4)/YOUR_OPENCV_PATH/sdk/native/jni/included要正确命名c函数,您的java似乎无法找到具有c函数的库。
OPENCV
仍在使用到gnustl的静态链接(当然,如果您正在寻找冒险,您可以修改后重新编译OPENCV)。警告消失了,因为现在有两个二进制文件使用不同的STL实现,这比忽略警告一点也不干净。
static {
try{
System.loadLibrary("gnustl_shared");
//To do - add your static code
}
catch(UnsatisfiedLinkError e) {
Log.v(TAG, "Native code library failed to load.\n" + e);
}
catch(Exception e) {
Log.v(TAG, "Exception: " + e);
}
}
static {
System.loadLibrary("opencv_java3");
}