Android 4.2 ndk:库加载崩溃:load_library(linker.cpp:750)|| soinfo_link_image || libhoudini.so || OpenCV的

时间:2015-03-02 09:29:47

标签: android opencv android-ndk unsatisfiedlinkerror

我正在使用包含opencv的本机库。 该库构建良好,适用于所有设备和模拟器,但不适用于Android 4.2。它在System.loadLibrary("mylib");上崩溃。

该库是为armeabi-v7a armeabi x86 mips构建的(我在jnilibs文件夹中看到生成了所有这些文件)

我被困在这个bug上,因为我在互联网上找不到任何可以解释我的问题的答案。

Cannot load library: soinfo_link_image(linker.cpp:1635): could not load library "libopencv_java.so",日志跟踪:

1755-1755/com.ex.app E/AndroidRuntime﹕ FATAL EXCEPTION: main
   java.lang.UnsatisfiedLinkError: Cannot load library: soinfo_link_image(linker.cpp:1635): could not load library "libopencv_java.so" needed by "libmylib.so"; caused by load_library(linker.cpp:745): library "libopencv_java.so" not found
           at java.lang.Runtime.loadLibrary(Runtime.java:371)
           at java.lang.System.loadLibrary(System.java:535)
           at com.ex.app.core.MyApplication.initVippAsync(MyApplication.java:198)
           at com.ex.app.core.MyApplication.onCreate(MyApplication.java:100)
           at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1000)
           at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4391)
           at android.app.ActivityThread.access$1300(ActivityThread.java:141)
           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1294)
           at android.os.Handler.dispatchMessage(Handler.java:99)
           at android.os.Looper.loop(Looper.java:137)
           at android.app.ActivityThread.main(ActivityThread.java:5039)
           at java.lang.reflect.Method.invokeNative(Native Method)
           at java.lang.reflect.Method.invoke(Method.java:511)
           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
           at dalvik.system.NativeStart.main(Native Method)

Android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
OPENCV_INSTALL_MODULES:=on
include /Users/ahmed/Documents/openCv4android/OpenCV-2.4.10-android-sdk/sdk/native/jni/OpenCV.mk
LOCAL_MODULE    := mylib
LOCAL_LDLIBS += -llog -ldl
LOCAL_SRC_FILES := myFile.c
include $(BUILD_SHARED_LIBRARY)

Application.mk:

APP_ABI := armeabi-v7a armeabi x86 mips
APP_PLATFORM := android-16

1 个答案:

答案 0 :(得分:14)

我找到了答案。这是两个步骤:

1 /如果您使用的是模拟器Genymotion,使用Android 4.2.2,则会因Genimotion的某个更新而导致缺少库。见this。 方案: (1)>下载以下zip文件:here。 (2)>只需将其拖放到您的模拟器即可。 (3)>重新启动你的模拟器。

2 /在Android 4.2中,操作系统在查找apk中提供的jni库路径时遇到了问题。例如,在我的情况下,我使用的是使用openCV库的jni库。 对于每个设备和Android版本调用System.loadLibrary("mylib");运行良好,mylib自动加载opencv库。 对于Android 4.2,正如@Chris在评论中所说,我明确地加载了openCV,所以:

System.loadLibrary("opencv_java");
System.loadLibrary("mylib");